summaryrefslogtreecommitdiff
path: root/advanced_opengl/8.geometry_shader/shaders/normals.geom
diff options
context:
space:
mode:
Diffstat (limited to 'advanced_opengl/8.geometry_shader/shaders/normals.geom')
-rw-r--r--advanced_opengl/8.geometry_shader/shaders/normals.geom42
1 files changed, 42 insertions, 0 deletions
diff --git a/advanced_opengl/8.geometry_shader/shaders/normals.geom b/advanced_opengl/8.geometry_shader/shaders/normals.geom
new file mode 100644
index 0000000..f0e1a75
--- /dev/null
+++ b/advanced_opengl/8.geometry_shader/shaders/normals.geom
@@ -0,0 +1,42 @@
+#version 330 core
+layout(triangles) in;
+layout(line_strip, max_vertices = 6) out;
+
+in VS_OUT {
+ vec3 normal;
+} gs_in[];
+
+uniform mat4 proj;
+
+const float MAGNITUDE = 0.4;
+
+void generate_line(int index)
+{
+ gl_Position = proj*gl_in[index].gl_Position;
+ EmitVertex();
+ gl_Position = proj*(gl_in[index].gl_Position+
+ vec4(gs_in[index].normal, 0.0)*MAGNITUDE);
+ EmitVertex();
+ EndPrimitive();
+}
+
+void main(void)
+{
+ /*
+ vec4 center = (gl_in[0].gl_Position+
+ gl_in[1].gl_Position+
+ gl_in[2].gl_Position)/3.0;
+ vec4 end = center+vec4(((gs_in[0].normal+
+ gs_in[1].normal+
+ gs_in[2].normal)/3.0),
+ 0.0)*MAGNITUDE;
+ gl_Position = proj*center;
+ EmitVertex();
+ gl_Position = proj*end;
+ EmitVertex();
+ EndPrimitive();
+ */
+ generate_line(0);
+ generate_line(1);
+ generate_line(2);
+}