2010-12-01 7 views
0

Beim Parsen einer .obj-Datei, mit Vertices und Vertex-Faces, ist es einfach, die Vertices an den Shader zu übergeben und glDrawElements mit den Vertex-Faces zu verwenden.Wie funktionieren Gesichter in .obj?

Beim Parsen einer OBJ-Datei mit Scheitelpunkten und Texturkoordinaten wird ein anderer Flächentyp verwendet: Texturkoordinatenflächen.

Bei der Anzeige von Texturen, neben dem Laden von Bildern, binden sie und übergeben Texturkoordinaten in den Parser, wie die Textur-Koordinatenflächen zu verwenden? Sie unterscheiden sich von den Scheitelflächen und ich nehme an, dass die Texturkoordinatenflächen einen Zweck haben, Texturen anzuzeigen?

Grüße Niclas

Antwort

0

Nicht sicher, was Sie fragen, aber wenn ich Sie richtig verstehe, Sie sich fragen, wie speichern Sie die Daten für die Textur einer texturierten 3D-Objekt machen Koordinaten. Wenn ja, dann speichern Sie Ihre Vertex-normal-textureCoordinate Daten in einem verschachtelten Format, wie unten:

vertexX vertexY vertexZ normalX normalY normalZ textureX textureY textureZ 

, wenn Sie eine Reihe von diesen haben Sie dann Zeiger auf die verschiedenen Teile des Arrays erstellen und machen wie unten :

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glVertexPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[0]); 
glNormalPointer(3, GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[3]); 
glTexCoordPointer(GL_FLOAT, sizeof(vertexArray[0])*9, &vertexArray[6]); 

glDrawElements(GL_TRIANGLES, indices.size(), GL_UNSIGNED_SHORT, &indices[0]); 

Zumindest so mache ich es. Vielleicht gibt es einen besseren Weg, und wenn es so ist, würde ich es gerne wissen.

+0

Hallo. Mein Problem ist vor allem Openeng ES 2. Entschuldigung für Ungenauigkeit. Aber was ich wirklich frage, ist der Index-Teil, es gibt 3 Arten von Indizes in einer .obj-Datei. Scheitelflächen, Textur-Koordinaten-Flächen und Normalflächen. Um die Texturen korrekt abbilden zu können, muss ich auch die Textur-Koordinaten-Flächen verwenden. – tyuip

+0

Ja, das ist richtig. Wenn Sie beim Initialisieren des Objekts die Eckpunkttexturkoordinaten zuordnen, wird es korrekt ausgegeben, wenn Sie eine Textur darauf platzieren. Wenn Sie schon einmal ein 3D-Animationspaket verwendet haben, haben sie etwas namens Textur-Mapping. Im Grunde teilt es jedem Eckpunkt mit, in welcher Position in UV-Koordinaten (0 bis 1) er für das Bild steht, das auf diese Flächen geladen wird. Wenn Sie ein Objekt in einem 3D-Paket texturieren und es dann als obj-Datei exportieren, stellen die Texturkoordinaten sicher, dass Ihr Bild in die Rechtebereiche eingefügt wird. – Davido