Textur(koordinaten?)fehler
-
Hallöchen,
Ich spiel hier grad mit OpenGL rum und krieg im Moment Artefakte beim Rendern eines Texturierten 3D-Objektes.hier mal zwei Screenshots:
http://xcpp.org/alsage/bugs/260908_1.png
http://xcpp.org/alsage/bugs/260908_2.pngBeim Thron ist es diese schwarze Linie. Beim Würfel kann man den Fall wahrscheinlich etwas klarer interpretieren (kann "man", aber nicht ich xD), da man auf der verwurschtelten Seite eigetlich zwei Farbige Dreiecke sehen sollte.
Das 3D-Modell kommt in beiden Fällen aus Blender. Habs mit einer Art Pseudo-Format (eher Binärdump der Vertices, Vertex Colors, Normals, Texturkoordinaten und Dreieck-Vertexindizes. So hab ich vorerst mehr kontrolle und sehe besser was ich falsch mache) exportiert (via Python-Script) und dann im Programm eingelesen.
Die Textur ist eine DDS-Datei und wird mit DevIL geladen. Bei anderen Formaten gibts dieselben Probleme.
Das Rendern erfolgt über Vertex Buffer Objects + glDrawRangeElements.
Ich weiß hier nicht recht, an welcher Stelle es hackt - kann sein, dass mein Pythonscript oder das einlesen im Programm nicht richtig klappt. Kann aber auch sein dass ich irgendeine Eigenheit von Blender (die Artefakte kommen da, wo ich in Blender Seams habe) oder DevIL nicht beachtet hab. Oder liegt es vielleicht an falscher Verwendung von VBOs? Ich weiß nicht recht wo ich überhaupt gucken soll "^^ Hilfe!!! xDD
-
ok - ich glaub ich sehe meinen fehler - in meinem binärdump habe ich jedem vertex nur eine mögliche Texturcoordinate zugewiesen. Das geht bei "Seams", bei welchen einem Vertex je nach Face unterschiedliche Texturkoodinaten zugewiesen werden, natürlich nicht. Jetzt versteh ich auch, warum Blender die Texturkoordinaten im MFace-Modul speichert.
hmm.. Die Frage ist - wie weißt man einem Vertex mehrere Texturkoordinaten zu? Oo
Kann man OpenGL irgendwie dazu veranlassen, unterschiedliche Texturkoordinaten für ein Vertex zu nehmen, je nachdem welches Face grad gezeichnet wird?
-
Wenn an identischer Vertex-Position unterschiedliche Vertex-Attribute gelten sollen, verwendet man fuer gewoehnlich mehrere Vertizen die eben den gleichen Positionsvektor haben.
Da die Polygonanzahl hoeher als die Vertexanzahl ist, verbrauchen andere Ansaetze fuer gewoehnlich nur mehr Speicher und werden hardwareseitig nicht unterstuetzt.