Computergrafik

Code-Sequenz für native VBOs

VBOs | | GL VBOs

Beispiel für die Implemetierung von nativen VBOs.

Dieser Code dient nur zur Erläuterung, was hinter den Kulissen passiert. Speziell im Praktikum benutzen wir lieber die Framework-Funktionen oder in Game-Engines die entsprechenden High-Level Schnittstellen!!!

Global

Variablen anlegen für:

  • Vertex-Buffer ( GLuint vbo; )

Init-Funktion

  • Annahme: vertex_array ist ein float-Array) und enthält die Vertices (vergleiche auch hier)
  • Es gibt ggfls. weitere Arrays für Attribute
  • Erzeugen von Vertex Buffer Objekten
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex_array), vertex_array, GL_STATIC_DRAW);

Render-Funktion

VBO und Attribute setzen

  • VBO selektieren
glBindBuffer(GL_ARRAY_BUFFER, vbo);
  • Vertices (Attribut 0) mit Komponenten (hier 4), Datentyp (hier float, Abstand in Bytes zwischen einzelnen Vertices (hier 0, direkt aufeinander folgend) spezifizieren
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, 0);
  • Optional: zusätzliche Attribute spezifizieren. Je Attribut (hier Farbe im float-Array color_array) mit Anzahl der Komponenten (hier 3), Datentyp (hier float, Abstand in Bytes zwischen einzelnen Attributen (hier 0, d.h. direkt aufeinander folgend)
glEnableVertexAttribArray(color_array);
glVertexAttribPointer(color_array, 3, GL_FLOAT, GL_FALSE, 0,
                      (void *)(sizeof(float)*4*6));

Endlich: Dreiecke zeichnen

  • Parameter bestimmen, ab welchem Index wieviele Vertices gezeichnet werden (hier 2*3=6 also 2 Dreiecke)
glDrawArrays(GL_TRIANGLES, 0, 6);


VBOs | | GL VBOs

Options: