Frage

Ich habe einen OBJ -Lader geschrieben, der die Eckpunkte, Texturkoordnungen und Normalen analysiert, jeweils in einem Schwimmerbuffer gespeichert und an OpenGL übergeben werden:

gl.glVertexPointer(3, GL10.GL_FLOAT, 0, fbVertices);
gl.glNormalPointer(GL10.GL_FLOAT, 0, fbNormals);

Allerdings bin ich verblüfft darüber, wie ich meinen Indexpuffer an Gldrawelements übergeben soll. Ich habe gelesen, dass sich der Index auf den Index im Array für Scheitelpunkte, Textur und Normalen bezieht, aber beim Lesen der OBJ -Datei Beschreibung. Es scheint, dass Gesichter in einem Format wie folgt gespeichert werden:

f 1/2/3 4/5/6 7/8/9

mit dem Format Wesen

vertice/texture/normal

Gldrawelements akzeptieren nur 1 Index, der sich auf alle 3 beziehen sollte, aber wenn ich mir eine tatsächliche OBJ -Datei betrachte, scheint dies nicht möglich zu sein. Wie passieren Sie den Index für alle 3?

Hier finden Sie eine Kopie des Codes:http://codepad.org/melc1hic

War es hilfreich?

Lösung

Sie können nicht direkt, Sie müssen einige Vorverarbeitungen durchführen, bevor Sie die Daten an OpenGL übergeben. Daher wird für jeden Scheitelpunkt nur ein Index verwendet, und dieser Index funktioniert auch für Texturkoordinaten, Normalen usw.

Andere Tipps

Ich habe eine kleine Bibliothek geschrieben, die .OBJ -Dateien analysiert und Beispielcode zum Rendern des Modells in OpenGL (LWJGL) enthält. Der Code zum Erstellen der VBOs ist hoffentlich ziemlich einfach und klar genug, um Ihnen eine Vorstellung davon zu geben, wie es funktioniert, oder Sie können einfach die Bibliothek verwenden oder aus dem Weg gehen und einfügen. (Die Lizenz ist gemeinnützig.) Schauen Sie sich sie an;

http://darksleep.com/oobjloader/

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