Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices in VBO
Aus DGL Wiki
Version vom 1. August 2018, 17:16 Uhr von Mathias (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „200px<br><br> =Vertex-Puffer - Indices in VBO = == Einleitung == Die Indices kann…“)
Inhaltsverzeichnis
Vertex-Puffer - Indices in VBO
Einleitung
Die Indices kann man auch in einen VBO speichern.
Eine Indices in den VBO speichern, geht mit folgedem Befehl glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ....
Dies geschieht auch innerhalb der VAO.
procedure TForm1.InitScene;
begin
glClearColor(0.6, 0.6, 0.4, 1.0); // Hintergrundfarbe
// --- Daten für das Dreieck
// VAO binden
glBindVertexArray(VBTriangle.VAO);
// Indices-Array mit VBO binden umd mit Daten befüllen.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, VBTriangle.VBO.Indicies);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(Triangle_Indices), @Triangle_Indices, GL_STATIC_DRAW);
// Vertex-Array mit VBO binden umd mit Daten befüllen.
glBindBuffer(GL_ARRAY_BUFFER, VBTriangle.VBO.Vertex);
glBufferData(GL_ARRAY_BUFFER, sizeof(Triangle), @Triangle, GL_STATIC_DRAW);
glEnableVertexAttribArray(10);
glVertexAttribPointer(10, 3, GL_FLOAT, False, 0, nil);
Bei glDrawElements(..., gibt man als dritten Parameter nur noch nil mit.
Die Indices sind im VAO gebunden.
procedure TForm1.ogcDrawScene(Sender: TObject);
begin
glClear(GL_COLOR_BUFFER_BIT);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); // Linien
Shader.UseProgram;
// Zeichne Dreieck
glBindVertexArray(VBTriangle.VAO);
glDrawElements(GL_TRIANGLES, Length(Triangle_Indices), GL_UNSIGNED_INT, nil); // Nur nil
// Zeichne Quadrat
glBindVertexArray(VBQuad.VAO);
glDrawElements(GL_TRIANGLES, Length(Quad_Indices), GL_UNSIGNED_INT, nil); // Nur nil
ogc.SwapBuffers;
end;
Vertex-Shader:
#version 330
layout (location = 10) in vec3 inPos; // Vertex-Koordinaten
void main(void)
{
gl_Position = vec4(inPos, 1.0);
}
Fragment-Shader:
#version 330
out vec4 outColor; // ausgegebene Farbe
void main(void)
{
outColor = vec4(vec3(0.0, 1.0, 1.0), 1.0);
}
Autor: Mathias
Siehe auch
- Übersichtseite Lazarus - OpenGL 3.3 Tutorial