shader normal debug 330
Aus DGL Wiki
Version vom 11. April 2015, 15:25 Uhr von Lord horazont (Diskussion | Beiträge)
Inhaltsverzeichnis
Normalen Debugging mit OpenGL 3.3 Core
Zurück zur Shadersammlung
Beschreibung | Autor | Version |
---|---|---|
Nützlicher Shader um die Normalen eines Modells anzuzeigen. | Lord Horazont, auf Basis von shader normal debug | 1.0 |
Bilder
Beschreibung
Dieser Shader nutzt einen Geometry Shader (OpenGL 3.3 Core) um die Normalen eines Modells anzuzeigen. Dazu wird das Modell einmal normal gerendert und dann nochmal mit dem Geometrieshader und einem spezialisierten Fragmentshader.
Besondere Vorraussetzungen
OpenGL 3.30 Core
Die Länge der anzuzeigenden Normalen wird über die Uniform-Variable normal_length gesteuert.
Code
Vom Vertex Shader wird angenommen, dass er die Normale als ``out vec3 normal;`` übergibt.
Geometry Shader:
#version 330 core
layout(triangles) in;
layout(line_strip, max_vertices=6) out;
// (projection * view * model) matrix
uniform mat4 proj_view_model;
// length of the normal (object space)
uniform float normal_length;
in vec3 normal;
out NDData {
vec3 normal;
} nd_out;
void main() {
for (int i = 0; i < 3; i++) {
gl_Position = gl_in[i].gl_Position;
nd_out.normal = normal;
EmitVertex();
gl_Position = gl_in[i].gl_Position +
proj_view_model * vec4(normal * normal_length, 0.f);
nd_out.normal = normal;
EmitVertex();
EndPrimitive();
}
}
Fragment Shader:
#version 330 core
in NDData {
vec3 normal;
} nd_in;
out vec4 color;
void main() {
color = vec4(normalize(nd_in.normal) * 0.5 + 0.5, 1);
}