Frage

Ich kodiere meinen eigenen .obj -Parser in OPJC für OpenGl ES 2.0, um ein besseres Verständnis dafür zu bekommen, wie dieses OpenGles -Ding funktioniert. Laden der Scheitelpunkte und Anzeigen eines Modells mit Scheitelpunktfarben funktioniert wie ein Zauber. Nur ein kleiner Hinweis: Ich verwende einen Indexpuffer.

Das eigentliche Problem ist die Zuordnung der Texturen. Wie Sie unten ein bisschen mehr sehen werden, wird meine Textur nicht so abgebildet, wie sie sein sollte.

So denke ich, dass das .obj-Format funktioniert. Bitte korrigieren Sie mich, wenn ich falsch liege: Die "f" -S-Lines beschreiben ein Gesicht, bei dem die Nummer vor einem Schrägstrich den Index des Scheitelpunkts und die Nummer nach dem Schrägstrich definiert, das eine Texturkoordinate definiert .

Betrachten Sie die folgende .obj -Datei (exportiert von Cinema 4D):

v -75 75 -50
v 75 75 -50
v -75 -75 -50
v 75 -75 -50

vt 0 0
vt 0 1
vt 1 1
vt 1 0

f 4/3 3/2 1/1
f 2/4 4/3 1/1

Und die folgende Textur:

512x512 Texture

Wenn ich nun die Scheitelpunkte im OpenGLE -3D -Raum positioniere und versuche, die Texturkoordinaten jedem einzelnen Scheitelpunkt zuzuordnen, geht die Zuordnung schief. Ich könnte dies beheben, indem ich mich um einige der Texturkoordinatenwerte bewegte, aber ich weiß, dass dies nicht der Weg ist, dies zu tun. Ich habe auch versucht, einige meiner .obj -Exportereinstellungen für Flip -Achsen- und/oder UV -Mapping zu bearbeiten, aber keine davon führt zu einer korrekten Zuordnung. Fehlt mir etwas in meiner Theorie in Bezug auf das .obj -Dateiformat? Eine Sache, die ich bereits sagen könnte: Ich habe gestern gelesen, dass das Koordinatensystem des .obj -Formats Topleft als Ankerpunkt einer Textur definiert. Also habe ich das bereits in meinem Parsen behoben.

Hier ist eine kleine Zusammenfassung mit der aktuellen Situation: Update: Das Koordinatensystem der Textur ist das tatsächliche .obj -Texturkoordinatensystem und nicht das Koordinatensystem von OpenGL. Ich übersetze die Koordinaten in meinem Parsing -Algorithmus, um dem entgegenzuwirken.

Summary

War es hilfreich?

Lösung 2

Ich werde meine eigene Frage beantworten: Das Problem schien, dass ich einen Indexpuffer verwendet habe, um die Leistung zu beschleunigen, aber meine Texturkoordinaten wurden immer noch den ursprünglichen Scheitelpunkten zugeordnet.

Andere Tipps

Soweit ich weiß, ist das von Ihnen gemeldete Koordinatensystem nicht die richtige.

Eigentlich ist es so etwas:

Coordinate System

Ich weiß, dass dies wahrscheinlich nicht die eigentliche Antwort auf Ihre Frage ist, aber ich hoffe, dass es etwas Licht darauf werfen.

Ich fand das ähnliche Problem an Parsen .obj -Dateien. In meinem Fall scheint es, dass meine .obj -Dateien invertierte V (2. Texturkoordinate) -Axis verwenden. Ich habe das Problem mit dieser Codezeile gelöst. v = 1,0f - V;

Maurizio ist in seiner Darstellung der OpenGL -Texturemapping -Koordinaten korrekt.

Wenn Sie sich Ihre Bilder ansehen, würde ich sagen, dass Sie sich Ihren OBJC -Code besser ansehen sollten. Angenommen, der .OBJ wird von C4D korrekt exportiert, so sieht es so aus, als hätten Sie Ihre Texturindizes durcheinander.

Plausible Proof: Schalten Sie den unteren linken Scheitelpunkt mit dem unteren rechten Scheitelpunkt in dem von Ihnen geposteten Bild ("Ergebnis OpenGL") und Ihre Textur würde rechts herauskommen.

Bearbeiten: Eigentlich kann der Fehler in Ihrem Texturladecode sein, aber das erklärt nicht das Ergebnis, das Sie erhalten. Selbst wenn der Fehler in der Texturbelastung wäre, wird die Textur einfach auf den Kopf gestellt (wegen des OpenGL-Koordinatensystems des linken Bottoms). Vorschlag: Switch VT0 und VT3 in Ihrem Code ...

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