Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - VertexID: Unterschied zwischen den Versionen
Aus DGL Wiki
Zeile 5: | Zeile 5: | ||
Das Rendering ist nicht besonderes, es spielt sich alles im Vertex-Shader ab.<br> | Das Rendering ist nicht besonderes, es spielt sich alles im Vertex-Shader ab.<br> | ||
<br><br> | <br><br> | ||
+ | Die Koordinaten der Mesh, maximal 6 Stück<br> | ||
+ | <syntaxhighlight lang="pascal">const | ||
+ | Triangle: array[0..0] of TFace2D = | ||
+ | (((-0.4, 0.1), (0.4, 0.1), (0.0, 0.7))); | ||
+ | Quad: array[0..1] of TFace2D = | ||
+ | (((-0.2, -0.6), (-0.2, -0.1), (0.2, -0.1)), | ||
+ | (( -0.2, -0.6), (0.2, -0.1), (0.2, -0.6)));</syntaxhighlight> | ||
<br><br> | <br><br> | ||
Da es in diesem Beispiel nur maximal 6 Vertex-Punkte gibt, habe ich die VertexID mit einer einfachen Case-Schleife ausgewertet.<br> | Da es in diesem Beispiel nur maximal 6 Vertex-Punkte gibt, habe ich die VertexID mit einer einfachen Case-Schleife ausgewertet.<br> | ||
Zeile 11: | Zeile 18: | ||
<syntaxhighlight lang="glsl">#version 330 | <syntaxhighlight lang="glsl">#version 330 | ||
− | layout (location = 10) in | + | layout (location = 10) in vec2 inPos; |
out vec3 col; | out vec3 col; | ||
Zeile 17: | Zeile 24: | ||
void main(void) | void main(void) | ||
{ | { | ||
− | gl_Position = vec4(inPos, 1.0); | + | gl_Position = vec4(inPos, 0.0, 1.0); |
switch (gl_VertexID) // Den aktuellen Vertex abfragen. | switch (gl_VertexID) // Den aktuellen Vertex abfragen. | ||
{ | { |
Aktuelle Version vom 1. August 2018, 16:55 Uhr
Inhaltsverzeichnis
Vertex-Puffer - VertexID
Einleitung
Mit gl_VertexID kann man im Vertex-Shader ermitteln, welcher Vertex aus der Vertex-Array gezeichnet wird.
Das Rendering ist nicht besonderes, es spielt sich alles im Vertex-Shader ab.
Die Koordinaten der Mesh, maximal 6 Stück
const
Triangle: array[0..0] of TFace2D =
(((-0.4, 0.1), (0.4, 0.1), (0.0, 0.7)));
Quad: array[0..1] of TFace2D =
(((-0.2, -0.6), (-0.2, -0.1), (0.2, -0.1)),
(( -0.2, -0.6), (0.2, -0.1), (0.2, -0.6)));
Da es in diesem Beispiel nur maximal 6 Vertex-Punkte gibt, habe ich die VertexID mit einer einfachen Case-Schleife ausgewertet.
Vertex-Shader:
#version 330
layout (location = 10) in vec2 inPos;
out vec3 col;
void main(void)
{
gl_Position = vec4(inPos, 0.0, 1.0);
switch (gl_VertexID) // Den aktuellen Vertex abfragen.
{
case 0: col = vec3(1.0, 0.0, 0.0);
break;
case 1: col = vec3(0.0, 1.0, 0.0);
break;
case 2: col = vec3(0.0, 0.0, 1.0);
break;
case 3: col = vec3(1.0, 1.0, 0.0);
break;
case 4: col = vec3(0.0, 1.0, 1.0);
break;
default: col = vec3(1.0, 0.0, 1.0);
}
}
Fragment-Shader
#version 330
out vec4 outColor;
in vec3 col;
void main(void) {
outColor = vec4(col, 1.0);
}
Autor: Mathias
Siehe auch
- Übersichtseite Lazarus - OpenGL 3.3 Tutorial