Ich weiß nicht opengl-es. aber ich muss Features von OBJ 3D-Modell in meiner Android-App verwenden. In der .obj-Datei kann ich Vertices, Texcoords und Normals finden. aber es gibt keine Indizes und stattdessen gibt es Gesichtselemente. Kann mir jemand klar erklären, wie man Indizes aus der .obj-Datei erhält?Erhalten Sie Indizes von .obj
Antwort
Möglicherweise ein wenig schwer klar zu schreiben, denn was OBJ eine Ecke betrachtet, ist nicht, was OpenGL eine Ecke betrachtet. Lassen Sie uns herausfinden ...
Eine OBJ-Datei erstellt Listen von Obj-Vertices (v
), Texturkoordinaten (vt
), Normalen (n
). Sie möchten diese wahrscheinlich nie an OpenGL übergeben (aber für den Vorbehalt bis zum Ende überspringen). Sie sind nur eine Möglichkeit für Ihren Laden Code die Bedeutung von v1
, vt3
usw.
Der einzige Ort zu schaffen, die openGL-Eckpunkte festgelegt sind innerhalb der f
Anweisung. Z.B. v1/vt1/vn1
bedeutet "der OpenGL-Vertex mit Position, Texturkoordinate und normal wie angegeben in der Liste".
So eine praktikable Lösung zu Laden ist, in Pseudo-Code:
- instantiate eine leere Hash-Karte von
v/vt/vn
Tripeln opengl-Vertex-Indizes, eine leere opengl-Vertex-Liste und eine leere Liste von Indizes für später Bittschrift zuglDrawElements
; - für jeden Tripel in der OBJ-Datei:
- Blick in die Hash-Tabelle, um zu bestimmen, ob sie bereits in der Liste opengl-Vertex ist, und wenn ja, um den Index zu Ihren Elementen Liste zu erhalten und fügen Sie ihn;
- wenn nicht, dann den nächsten verfügbaren Index dem Tripel zuweisen (also, dies ist nur eine inkrementierende Zahl), setzen Sie das in die Hash-Karte und die Liste der Elemente, kombinieren Sie das Tripel und fügen Sie es in die OpenGL-Vertex-Liste.
Sie können versuchen, besser als das zu tun, indem er versucht, das Potenzial hoch Random Access es bei Zeichen Zeit, um Ihre opengl-Vertex-Liste bedeutet, zu minimieren, aber nicht optimieren vorzeitig.
Caveat:
Wenn Ihr GPU unterstützt Vertex Texture (dh Textursampling im Vertex-Shader) holen, dann können Sie nur die Tripel direkt auf OpenGL liefern, die obj-Eckpunkten angesammelt haben, etc, in Textur-Maps und führen Sie die indirekte Suche in Ihrem Vertex-Shader aus. Beim Vertex-Textur-Fetch werden Texturen wirklich nur zu 2D-Arrays mit wahlfreiem Zugriff. Viele Android-GPUs unterstützen jedoch nicht den Abruf von Vertextexturen (selbst wenn sie ES3 unterstützen, was sie angeblich erforderlich macht, da eine Implementierung angeben kann, dass sie maximal null Sampler unterstützt).
- 1. OpenGL Vertices und Indizes zu Wavefront Obj
- 2. Erhalten Indizes von coumn Namen
- 3. Erhalten Sie Indizes, die einige Kriterien erfüllen
- 4. So erhalten Sie alle Indizes der Suchzeichenfolge
- 5. Wie erhalten Sie Indizes von Werten in einem Pandas DataFrame?
- 6. erhalten Indizes Originaltext von nltk word_tokenize
- 7. Wie Objekt von Indizes in Areablock erhalten?
- 8. Konkurrierende Arrays und Indizes erhalten
- 9. So erhalten Sie einen Obj-Schlüssel von FirebaseListAdapter für einen Artikel Klicken Sie auf. FirebaseUI
- 10. Wie erhalten Sie alle Indizes eines Musters in einer Zeichenfolge?
- 11. Wie erhalten Sie Indizes ausgewählter Elemente in der WPF-Listbox?
- 12. So verwenden Sie Solr-Indizes von Elasticsearch
- 13. Finden Sie Nutzungsstatistiken von MySQL-Indizes heraus?
- 14. Indizes von True-Werten in einer Booleschen Liste erhalten
- 15. Erhalten Indizes von n Maxima in Java-Array
- 16. Wie Indizes von Maximalwerten in Anzahl, aber mit Schwellenwert erhalten?
- 17. SQL-Indizes beim Ändern des Spaltentyps erhalten
- 18. SolidWorks zu OBJ exportieren
- 19. AngularJS: if (obj) vs if (obj! == null & angular.isDefined (obj))
- 20. MySQL-Indizes: Wie funktionieren sie?
- 21. Was bedeutet Object (obj) === obj do?
- 22. Obj-C Ausnahme ausgelöst von libxml Fehlerhandler Rückruffunktion (Obj-C++) wird nicht in Obj-C
- 23. Unterschied zwischen Typ (Obj) und Obj .__ Klasse__
- 24. C# -Äquivalent von OBJ-C
- 25. Extrahieren von Tupel-Indizes
- 26. Indizes von referenzierten Listen
- 27. Overhead von Composite-Indizes
- 28. konvertieren Sie mehrere Dateien von .LWO in .OBJ oder ähnlich
- 29. Erstellen Sie eine neue Instanz von Bind generiert obj
- 30. Neuaufbau von Indizes ändert nicht die Fragmentierung% für Nonclustered-Indizes
Sie müssen Wavefront-Objekt Dateispezifikation lesen – Raki
Sie meinen: http://www.martinreddy.net/gfx/3d/OBJ.spec –
Ja, so etwas oder sogar aus Wikipedia. Wenn Sie wissen, wie Sie Indizes von Flächen erhalten, werden Flächen nur mit Indizes gebildet. – Raki