ich überlege aus Performancegründen von Displaylisten auf
VBO's umzusteigen. Da ich sehr viele Dreiecke habe,
denke ich macht das Sinn. Kann mir noch einer ein paar
Vor und auch Nachteile der einzelnen Verfahren nennen, oder
eine gute Informationsseite?
Man übergibt einem VBO ja ein Vertexarray. Wie muss
das Array aufgebaut sein? Wenn man Dreiecke haben will
muss man das Array so sortieren, das die ersten drei Werte
ein Dreieck sind und das 4 bis 6 wieder eins etc ...
Stimmt das?
Aber wenn ich kein Umweg über den Hauptspeicher machen
will, das hab ich noch nicht ganz verstanden, hast du da noch
ein Dokument? oder Seite?
Ach so, und an welcher Stelle sagt man wie das Array
mit den Vertices aufgebaut ist?
Hatte auch gelesen, das wenn eine Grafikkarte VBO's unterstützt,
es kein Unterschied macht, VBO's oder DL's zu nehmen, ist das
wahr? Weil dann versteh ich nicht den Vorteil von VBO's wenn man
eine sich nicht ändernde szene hat..
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
blender123 hat geschrieben:
Ach so, und an welcher Stelle sagt man wie das Array mit den Vertices aufgebaut ist?
glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), nil);
heißt es gibt 2Texturkoordinaten als Float und 3VertexKoordinaten als Float, das ganze wird so groß wie TVertex ist.
Registriert: Mi Jul 17, 2002 12:07 Beiträge: 976 Wohnort: Tübingen
Statt GL_T2F_V3F stehen dir auch GL_V2F, GL_V3F, GL_C4UB_V2F, GL_C4UB_V3F, GL_C3F_V3F, GL_N3F_V3F, GL_C4F_N3F_V3F, GL_T4F_V4F, GL_T2F_C4UB_V3F, GL_T2F_C3F_V3F, GL_T2F_N3F_V3F, GL_T2F_C4F_N3F_V3F und GL_T4F_C4F_N3F_V4F (siehe glInterleavedArrays) zu Verfügung.
_________________ "Du musst ein Schwein sein in dieser Welt, sangen die Prinzen, das ist so 1.0. Du musst auf YouTube zeigen, dass dir dein Schweinsein gefällt, das ist leuchtendes, echtes Web 2.0." - Hal Faber Meine Homepage: http://laboda.delphigl.com
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Sobald du min 2 Texturkoordinaten brauchst, dann kommst du nicht drumherum die Defintion deines "Arrays" selber zu deklarieren. glInterleave bietet ein paar Möglichkeiten an. Aber alle sehen so aus, dass als hättest du Records mit den entsprechenden Werten hintereinander gelegt. VBOs ermöglichen aber unter anderem auch, dass du Vertex, Textur und Farbbuffer getrennt im Speicher ablegst. Also zu erst alle Vertices, dann Texturkoordinaten etc.
Anstellen von glInterleavedArrays kannst du das auch mit glVertexPointer etc (Siehe unten) machen.
Aber noch mal was zu DisplayListen. Diese sollten auf modernen Grafikkarten eigentlich auch VBOs benutzen. Von daher sollte es von der Geschwindigkeit kaum einen Unterschied geben. Wobei das in einer DL wohl noch ein bisschen besser optimiert werden kann. Also das Handling mit den VBOs.
Das heißt ja dann, das ich mein Programm was ich mit DL's habe eigentlich
nicht umschreiben sollte, da es dann eh nicht schneller wird?
Ist das wirklich so, weil alle loben VBO's so?
Kurz zu meinem Programm:
Ich hab eine grosse Szene, wo ich auch keine Dreiecke rausschmeissen kann / will.
Ich benutze DisplayListen und von der Performance ist es naja
nicht so dolle... DIe Szene ist statisch und wird nur über translationen
und rotationen verändert. Macht es Sinn, trotzdem VBO's einzubauen?
Ok, ab ca. 2 Millionen Vertices, sind dann DL's oder VBO's schneller? das würde die Entscheidung bringen, weil das ist das was ich will.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Na ja. DLs können auch normale VertexArrays benutzen. Du kannst bei denen nicht kontrollieren was intern passiert. Und normal sollten auf einem System welches VBOs unterstützt auch VBOs benutzt werden.
VBOs sind aber wesentlich flexibler. Du kannst Teile davon updaten oder löschen. Oder wenn du ein riesen Mesh im Speicher hast kannst du recht einfach kontrollieren, dass nur gewisse Teile davon gezeichnet werden.
Ob du VBOs benutzen solltest kannst nur du selber wissen. Aber es kann auch durchaus sein, dass auf einem System VBOs nicht unterstützt werden. Dann aber höchstwahrscheinlich normale Vertex Arrays. Die sind bis auf kleine Unterschiede den VBOs ziemlich ähnlich. Dann sind DLs aber auch nicht schneller.
Zu der Geschwindigkeit von deinem Programm: *grummel* Deinen Betrag editieren wärend ich gerade eine Antwort schreibe. Schäm dich. Also 2 Mio sind nicht gerade wenig. Ich denke mal wirst immer alle Dreiecke davon zeichnen, oder? Aber noch mal zum Verständniss. DLs benutzen intern die VBO Technik. Es wird also entsprechend ziemlich in dem gleichen Segment liegen. Bei den ersten VBO implementationen konnte es passieren, dass man eine ungünstige Konstelation erwischt und es deswegen ein bisschen langsam war. Aber dieses Problem sollte heutzutag nicht mehr existieren. Also richtet sich alles nach dem was du damit vor hast. Und das wirst du selber am besten wissen.
Ok, ich denke ich werde VBO's nutzen, da ich mir jetzt überlegt habe,
nochmal was mit LOD zu machen, also in dem gleichen Projekt und dann
haben VBOs ja ein riesen Vorteil.
Kennst du da vielleicht noch was zum Lesen anschauen oder so?
Mitglieder in diesem Forum: 0 Mitglieder und 4 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.