Computergrafik

Einfache Standard-Codesequenz Mit VBO

Bezieht sich auf EinfacheStandard-Codesequenz

Erweiterung um VBOs:

Global

Variablen anlegen für:

  • Vertex-Buffer ( GLuint vbo; )

Init-Funktion

1b) Erzeugen von Vertex Buffer Objekten

Für eigene Geometrie (es muss nicht immer der Teapot sein): vertices enthält Vertices und gegebenenfalls Attribute in einem Array (typ. ein float-Array):

glGenBuffers    (1, &vbo);
glBindBuffer    (GL_ARRAY_BUFFER, vbo);
glBufferData    (GL_ARRAY_BUFFER, sizeof(vecData), vertices, GL_STATIC_DRAW);

Display-Funktion

3b) VBO und Attribute setzen
  • VBO selektieren
glBindBuffer (GL_ARRAY_BUFFER, vbo);
  • Vertices beschreiben (Vertices sind “Attribut 0”); Aufpassen auf Anzahl der Komponenten (hier 4), Datentyp (hier float, Abstand in Bytes zwischen einzelnen Vertices (hier 0, d.h. sie folgen direkt aufeinander)
glEnableVertexAttribArray (0);
glVertexAttribPointer     (0, 4, GL_FLOAT, GL_FALSE, 0, 0);
  • Zusätzliche Attribute beschreiben; je Attribut: Aufpassen auf Anzahl der Komponenten (hier 3) des Attributs, Datentyp (hier float, Abstand in Bytes zwischen einzelnen Attributen (hier 0, d.h. sie folgen direkt aufeinander) Bestimmen des Abstands von Beginn der Daten in Bytes (hier: Datentyp float für Vertices, 4 Komponenten je Vertex, 6 Vertices) Der cast auf void * ist nur nötig, um eine Warning zu umgehen (historische Gründe, besser nicht fragen).
glEnableVertexAttribArray (attrib_color);
glVertexAttribPointer     (attrib_color, 3, GL_FLOAT, GL_FALSE, 0,
                           (void *) (sizeof(float)*4*6) );
4) (Alternative) Endlich: Dreiecke zeichnen

Parameter bestimmen, ab welcher Vertex-Nr. (oft 0) wieviele Vertices gezeichnet werden (bei Dreiecken: Anzahl an Dreiecke mal 3 - hier also 2 Dreiecke)

glDrawArrays (GL_TRIANGLES, 0, 6);


Options: