VBOs
← GL Vertex Arrays | ● | Native VBOs →
VBOs
VBO = Vertex Buffer Object
Ein VBO ist ein Container Objekt für Vertex Array oder Index Face Set.
VBOs sind im LGL Framework in der lglVBO Klasse abstrahiert.
Um einen VBO zu verwenden, müssen in den folgenden Code-Abschnitten die entsprechenden Änderungen vorgenommen werden:
Global
Ein VBO wird global instanziiert (bzw. im Abschnitt protected):
Init-Funktion
VBOs werden benutzt, um Geometrie effizient zu spezifizieren. Es gibt folgende Methoden, um in der Initialisierungs-Funktion einen VBO anzulegen:
1) Man fügt Vertices und Attribute hinzu, wie man es im Direct Mode gewohnt war. Die Vertices und Attribute werden aber nicht direkt über den Bus zur GPU geschickt, sondern einem Buffer (Vertex Array) hinzugefügt.
vbo.lglBegin(LGL_TRIANGLES);
vbo.lglColor(1, 0, 0, 0);
vbo.lglVertex(-0.5,-0.5,0);
vbo.lglColor(0, 1, 0, 0);
vbo.lglVertex(0.5,-0.5,0);
vbo.lglColor(0, 0, 1, 0);
vbo.lglVertex(0,0.5,0);
vbo.lglEnd();
2) Spezifikation eines VBOs via Interleaved Vertex Array:
// specify interleaved vertex array
static const float array[] =
{
// component order:
// x,y,z, r,g,b
-0.5,-0.5,-1, 1,0,0,
0.5,-0.5,-1, 0,1,0,
0,0.5,-1, 0,0,1
};
// copy interleaved vertex array into vbo
// 3 vertices with according x,y,z components
// 3 additional components r,g,b for interleaved color attribute
// 0 additional components nx,ny,nz for interleaved normal attribute
// 0 additional components s,t,r for interleaved texture coordinate attribute
vbo.lglInterleavedVertexArray(LGL_TRIANGLES, array, 3, 3, 0, 0);
3) Laden eines VBOs aus einer OBJ Datei:
Render-Funktion:
Beim Zeichnen in der Render-Funktion wird der VBO automatisch als zusammenhängender Speicherbereich zur GPU übertragen und dort gebuffert (gecached).
Dies ermöglicht die Wiederverwendung ohne nochmalige Übertragung, d.h. die Vertex-Arrays eines VBO können im Speicher der Grafikhardware resident gehalten werden, so dass nur noch der Befehl zum Zeichnen der entsprechenden Indices des VBO über den Bus geschickt werden muss:
lglRender(vbo);
Live Demo: VBO (T#1c)
← GL Vertex Arrays | ● | Native VBOs →