|
|
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]]
| |