shader normal debug
Aus DGL Wiki
Inhaltsverzeichnis
Normalen Debugging
Zurück zur Shadersammlung
Beschreibung | Autor | Version |
---|---|---|
Nützlicher Shader um die Normalen eines Modells anzuzeigen. | dj3hut1 | 1.0 |
Bilder
Beschreibung
Dieser Shader nutzt einen Geometry Shader um die Normalen eines Modells anzuzeigen. Dazu wird das Modell einmal normal gerendert und dann nochmal im Shader-Modus.
Besondere Vorraussetzungen
OpenGL 2.0 und die Erweiterung GL_ARB_geometry_shader4.
Die Länge der anzuzeigenden Normalen wird über die Uniform-Variable nLength gesteuert.
Spezielle Linkparameter
Folgende Parameter wurden für den Geometry Shader mit glProgramParameterARB vor dem Linken gesetzt :
-
GL_GEOMETRY_INPUT_TYPE_ARB : GL_TRIANGLES
-
GL_GEOMETRY_OUTPUT_TYPE_ARB : GL_LINE_STRIP
-
GL_GEOMETRY_VERTICES_OUT_ARB : 6
Hinweis : In diesem Fall wird das Modell komplett mit den Dreiecksflächen übergeben, aus Performancegründen kann man auch nur die Vertices statt den Flächen benutzen ( dann muss man als Input GL_POINTS statt GL_TRIANGLES setzen ).
Code
Vertexshader
varying vec4 V;
varying vec3 N;
void main()
{
V = gl_Vertex;
N = gl_Normal;
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
Geometryshader
#version 120
#extension GL_ARB_geometry_shader4 : enable
//input GL_TRIANGLES
//output GL_LINE_STRIP
varying in vec4 V[3];
varying in vec3 N[3];
uniform float nLength;
void createNormal( vec3 V, vec3 N )
{
gl_Position = gl_ModelViewProjectionMatrix * vec4( V, 1.0f );
EmitVertex();
gl_Position = gl_ModelViewProjectionMatrix * vec4( V + N * nLength, 1.0f );
EmitVertex();
EndPrimitive();
}
void main()
{
for ( int i = 0; i < 3; ++i )
{
createNormal( V[i].xyz, N[i] );
}
}
Fragmentshader
void main()
{
gl_FragColor = vec4( 1.0, 1.0, 0.0, 1.0 );
}