Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices in VBO: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „200px<br><br> =Vertex-Puffer - Indices in VBO = == Einleitung == Die Indices kann…“)
 
(Die Seite wurde geleert.)
 
Zeile 1: Zeile 1:
[[Image:Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - Indices in VBO.png|200px]]<br><br>
 
=Vertex-Puffer - Indices in VBO =
 
== Einleitung ==
 
Die Indices kann man auch in einen VBO speichern.<br>
 
<br><br>
 
Eine Indices in den VBO speichern, geht mit folgedem Befehl '''glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ...'''.<br>
 
Dies geschieht auch innerhalb der VAO.<br>
 
<syntaxhighlight lang="pascal">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);</syntaxhighlight>
 
Bei '''glDrawElements(...''', gibt man als dritten Parameter nur noch '''nil''' mit.<br>
 
Die Indices sind im VAO gebunden.<br>
 
<syntaxhighlight lang="pascal">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;</syntaxhighlight>
 
<br><br>
 
==Vertex-Shader:==
 
<syntaxhighlight lang="glsl">#version 330
 
 
layout (location = 10) in vec3 inPos; // Vertex-Koordinaten
 
 
void main(void)
 
{
 
  gl_Position = vec4(inPos, 1.0);
 
}
 
</syntaxhighlight>
 
<br><br>
 
==Fragment-Shader:==
 
<syntaxhighlight lang="glsl">#version 330
 
 
out vec4 outColor;  // ausgegebene Farbe
 
 
void main(void)
 
{
 
  outColor = vec4(vec3(0.0, 1.0, 1.0), 1.0);
 
}
 
</syntaxhighlight>
 
 
<br>Autor: [[Mathias]]
 
== Siehe auch ==
 
* Übersichtseite [[Lazarus - OpenGL 3.3 Tutorial]]
 

Aktuelle Version vom 1. August 2018, 16:56 Uhr