Registriert: Di Nov 07, 2006 13:37 Beiträge: 83 Wohnort: Partenheim
Hallo!
Ich habe das Problem, dass die Daten meines Objekts so vorliegen, dass sie sich mit allen, mir bekannten, Methoden nicht als VBO in den Grafikkarten-RAM laden lassen.
Meine Vertex-Daten haben folgende Struktur:
Code:
Vertex :Arrayof TVector3f;
Normal :Arrayof TVector3f;
UVCoord :Arrayof TVector2f;
Und ein Triangle-Index-Array, das, pro Triangle 3x3 Referenzen enthält (für jeden Vertex des Dreiecks jeweils VertexPosition, VertexNormal und VertexUVCoord), welche auf die 3 o.g. Arrays verweisen.
Ich stelle mir vor, dass es die einfachste und sparsamste Lösung wäre, die 3 Arrays nacheinander in den GRAM hochzuladen und dann via glDrawRangeElements mit der IndexListe ("indices") auf die einzelnen VertexElemente zuzugreifen.
Leider erwartet die IndexListe nur einen einzigen Pointer pro Paket (GL_T2F_N3F_V3F). Dieses Paket existiert bei mir aber nicht. Ich bräuchte eine dreimal so große IndexListe, die pro Paket 3 Referenzen erwartet: Eine für T2F, eine für N3F und eine für V3F.
Dabei müssen diese nicht immer TNV TNV TNV sein sondern können auch TTT NNN VVV sein. Oder wegen meiner noch mit was anderem dazwischen. Das kannst du nach belieben einstellen. glInterleavedArrays erwartet die Daten aber immer nach der ersten Methode.
Was aber nicht geht ist, dass du bei dem Vertex 3 die Texturkoordinaten 17 die Normale 4 und den Vertex 9 nimmst. Das geht nicht. Es gibt einen Indexbuffer und da steht drin, dass das Element 17 benutzt wird. Und das wird dann aus den einzelnen Buffern genommen.
Registriert: Di Nov 07, 2006 13:37 Beiträge: 83 Wohnort: Partenheim
Hi Lossy ex!
Vielen Dank für deine Antwort, das bringt mich schon mal um Einiges weiter.
Der Rest ist allerdings unheimlich schade (ich beziehe mich auf den letzten Abschnitt deiner Antwort).
Heißt das, ich muss immer genau so viele TexturKoordinaten wie Normalen wie VertexPositionen im GRAM haben?
Dann bleibt aber die Methode glDrawRangeElements(...) immer noch die sparsamste (auf die Größe des GRAMs bezogen)?
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Ja. Also nach meinem Wissen benötigst du für jeden Vertex sowohl auch die normalen als auch die Texturkoordinaten. Also alles was du benutzen willst.
Wenn du eine zusammenhängende Fläche hast und du die Vertexdaten jeweils teilst sollte glDrawRangeElements eigentlich mit am platzsparensten sein. Bzw kann die Grafikkarte durch den Index evtl noch etwas besser optimieren.
Registriert: Di Nov 07, 2006 13:37 Beiträge: 83 Wohnort: Partenheim
Interessant, vielen Dank.
Komm' ich drauf zurück, falls ich mit bisheriger Methode, wie du schon gesagt hast, lediglich
Zitat:
die Vertices für jede Fläche zu doppeln
, auf große Performance-Einbußen stoßen sollte. Für das VBO sortiere ich nämlich bisher nichts, aber die Face-Daten stammen aus Blender und daher gehe ich davon aus, dass aufeinander folgende Faces auch in der Datei nah beieinander liegen (ist ja immerhin BLENDER!!! ).
Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.