2010-07-30 6 views
5

Also ist es in einer OpenGL-Rendering-Anwendung normalerweise besser, während der gesamten Lebensdauer einer Anwendung einen Vertex-Puffer zu erstellen und zu pflegen und die Daten bei jedem Rahmen mit glBufferData auszutauschen, oder ist es besser, einfach die VBO zu löschen Erstelle es jedes Bild neu?Besser neue VBOs erstellen oder einfach die Daten austauschen? (OpenGL)

Intuition sagt mir, dass es besser ist, Daten auszutauschen, aber ein paar Beispielprogramme, die ich gesehen habe, tun letzteres, also bin ich irgendwie verwirrt.

Ich habe Nvidias Whitepaper über VBOs gelesen, aber da ich ein Neuling für opengl bin, hat es keinen Sinn ergeben.

Vielen Dank im Voraus für und Beratung

Antwort

5

Da Sie eine ganz neue Reihe von Daten jeden Rahmen der Dokumentation zu zeigen, ist zu erzeugen scheint, dass GL_STREAM_DRAW der richtige Weg, über Dinge zu gehen.

0

Das wesentliche an VBOs ist, dass es sich um Render-Datenpuffer handelt, die im Grafikspeicher und nicht im Hauptspeicher des Computers gespeichert sind. Dies macht ihre Verwendung sehr effizient, wenn die Daten in ihnen nicht (häufig) aktualisiert werden, da der Computer jedes Mal (potentiell große Mengen an) Daten von dem Hauptspeicher in den Grafikspeicher übertragen muss - was langsam ist .

Der ideale Fall ist also, alle benötigten Renderdaten einmal in VBOs zu schreiben und dann nur über OpenGL-Funktionen wie Matrixtransformation oder über Shader zu manipulieren.

So würden Sie z.B. Lege die Welt-Raumkoordinaten und Textur-Koordinaten jedes Meshes in VBOs ein und berühre sie nie wieder direkt. Sie würden die Modelview-Matrix, Lichtfunktionen und Shader verwenden, um sie zu rendern.

Sie können mehr tun, um die VBO-Nutzung zu optimieren, aber das sind die Grundlagen, wie ich sie verstanden habe.

Finden Sie einige gute Hinweise und weitere Details hier: How do I use OpenGL 3.x VBOs to render a dynamic world?