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…“)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices in VBO.png

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