Wie man setup / berechnen texturebuffer in glTexCoordPointer, wenn sie von OBJ-Datei importieren

StackOverflow https://stackoverflow.com/questions/4233152

  •  26-09-2019
  •  | 
  •  

Frage

Ich bin Parsen eine OBJ-Datei in Android und mein Ziel ist es, das Objekt zu machen und anzuzeigen. Alles funktioniert gut, außer dem richtigen Textur-Mapping (Import die Ressource / Bildes in opengl etc funktioniert gut).

Ich weiß nicht, wie die Textur bezogenen Daten aus der OBJ-Datei in ein texturebuffer-Objekt zu füllen.

In der OBJ-Datei Ich habe vt-Zeilen:

vt 0.495011 0.389417 
vt 0.500686 0.561346

und face-Zeilen:

f 127/73/62 98/72/62 125/75/62

Mein Einzug Routine sieht aus wie (nur relevante Teile):

gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);
gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, vertexBuffer);
gl.glNormalPointer(GL10.GL_FLOAT, 0, normalsBuffer);

gl.glTexCoordPointer(2, GL10.GL_SHORT, 0, t.getvtBuffer());

gl.glDrawElements(GL10.GL_TRIANGLES, t.getFacesCount(), GL10.GL_UNSIGNED_SHORT, t.getFaceBuffer());

Ausgabe der Zählungen der OBJ-Datei:

Vertex-count: 1023
Vns-count: 1752
Vts-count: 524
/////////////////////////
Part 0
Material name:default
Number of faces:2037
Number of vnPointers:2037
Number of vtPointers:2037

Jede beraten ist willkommen.

War es hilfreich?

Lösung

Leider nicht sicher, in welchem ??Umfang dies ist gönnerhaft, aber von oben:

f 127/73/62 98/72/62 125/75/62

Die Mittel ein Dreieck zwischen dem Scheitelpunkt mit der 127. Position in der Datei angegeben, die Textur der 73. Position in der Datei und die 62. normal und die beiden anderen in ähnlicher Weise angegebenen Eckpunkten.

In OpenGL geben Sie nur einen einzigen Index pro Vertex (wie das Ganze der Transformation als eine einzige Einheit durchläuft), so dass man auf Figur müssen alle aus den verschiedenen Kombinationen von Position, Texturkoordinaten und normal und ordnen die Puffer Sie passieren zu glVertexPointer, glNormalPointer und glTexCoordPointer entsprechend. Zum Beispiel könnte der über den Nennwert liegendes Ende über GL_TRIANGLES spezifiziert wird, wie zwischen den Scheitelpunkten 0, 1 und 2, in dem Sie die 127. Position in dem ersten in Ihrem internen Eckpunktpufferspeicher kopiert hatten, hatte man die 73rd kopiert ersten Texturkoordinaten Koordinate in Ihrem internen Textur-Puffer und hatte man den 62. normal zur ersten in Ihrer internen normalen Liste kopiert.

Sehr wahrscheinlich wollen Sie eine HashMap die Kombinationstaste unter Vertex / Texturkoordinaten / normal und die Zuordnung zu einer Position in Ihrer internen Arrays. Wie Sie in der eingehenden OBJ über jedes Gesicht kommen, können Sie überprüfen, ob Sie bereits haben diese Kombination in Ihrem internen Puffer zu einem Punkt zugeordnet und es den nächsten verfügbaren geben, wenn es nicht.

vt ist eine Textur-Koordinaten zum Runterladen, so z.B. die Texturkoordinaten:

vt 0.495011 0.389417

bedeutet, dass innerhalb Texturraum, x = 0.495011, y = 0,389417. Aus dem Speicher, haben das OBJ-Dateiformat und die OpenGL y-Achsen in entgegengesetzten Richtungen. So in OpenGL Bedingungen würden Sie wollen, s = 0.495011, t = 1 -. 0,389417 = 0,610583

Wenn Ihr Ziel ist, eine geeignete Weise kompliziert Texturatlas oder Häuten verwendet wird, stelle ich mir es nicht offensichtlich weit wäre, dass die y-Koordinaten gespiegelt werden; wenn man nur so etwas wie ein Würfel mit der gleichen Textur in seiner Gesamtheit auf jeder Seite wiederholt hat, dann würden Sie wahrscheinlich sehen es genauso entlang der vertikalen gekippt wird.

Does, die die Quelle der Verwirrung decken?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top