shader normal debug 330: Unterschied zwischen den Versionen
Aus DGL Wiki
(Die Seite wurde neu angelegt: „=Normalen Debugging mit OpenGL 3.3 Core= Zurück zur Shadersammlung {|{{Prettytable_B1}} width=100% !width=60%|Beschreibung !width=20%|Autor !width=20%|Ver…“) |
|||
Zeile 7: | Zeile 7: | ||
|- | |- | ||
|Nützlicher Shader um die Normalen eines Modells anzuzeigen. | |Nützlicher Shader um die Normalen eines Modells anzuzeigen. | ||
− | |Lord Horazont | + | |Lord Horazont, auf Basis von [[shader normal debug]] |
|1.0 | |1.0 | ||
|} | |} |
Aktuelle Version vom 11. April 2015, 15:25 Uhr
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);
}