VBOs
← GL Vertex Arrays | ● | Mehrere VBOs →
VBOs
VBOs sind im Framework in der lglVBO Klasse abstrahiert.
Es gibt zwei Methoden, um Geometrie zu spezifizieren:
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 (Array) hinzugefügt.
lglVBO vbo;
...
// fill VBO once with vertex and attribute data
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();
Zum Zeichnen wird der Buffer am Stück als Speicherbereich zur GPU übertragen und dort gebuffert (gecached). Dies ermöglicht die Wiederverwendung ohne nochmalige Übertragung:
lglRender(vbo);
2) Spezifikation eines VBOs via Interleaved Vertex Array:
...
// dynamically create vertex buffer object (vbo)
vbo = new lglVBO();
// 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);
Gezeichnet wird wie folgt:
lglRender(vbo);
Alternativ: Laden eines VBOs aus einer OBJ Datei:
Live Demo: VBO (T#1c)
← GL Vertex Arrays | ● | Mehrere VBOs →