Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - VertexID: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
 
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 vec3 inPos;
+
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

Lazarus - OpenGL 3.3 Tutorial - Vertex-Puffer - VertexID.png

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