summaryrefslogtreecommitdiff
path: root/geometry_shader/shaders/normals.gs
diff options
context:
space:
mode:
authorpryazha <pryadeiniv@mail.ru>2025-01-19 17:33:44 +0500
committerpryazha <pryadeiniv@mail.ru>2025-01-19 17:33:44 +0500
commitbd49bd525f4c6c6c15c4142bf42d1dd38be6fc16 (patch)
tree9e69f473c34b53e9e57d8af1873c39698bf5c80e /geometry_shader/shaders/normals.gs
initial commit
Diffstat (limited to 'geometry_shader/shaders/normals.gs')
-rw-r--r--geometry_shader/shaders/normals.gs44
1 files changed, 44 insertions, 0 deletions
diff --git a/geometry_shader/shaders/normals.gs b/geometry_shader/shaders/normals.gs
new file mode 100644
index 0000000..3720a5f
--- /dev/null
+++ b/geometry_shader/shaders/normals.gs
@@ -0,0 +1,44 @@
+#version 330 core
+layout(triangles) in;
+layout(line_strip, max_vertices = 6) out;
+
+in VS_OUT {
+ vec3 normal;
+} gs_in[];
+
+uniform mat4 projection;
+
+const float MAGNITUDE = 0.4;
+
+void
+generate_line(int index)
+{
+ gl_Position = projection*gl_in[index].gl_Position;
+ EmitVertex();
+ gl_Position = projection*(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 = projection*center;
+ EmitVertex();
+ gl_Position = projection*end;
+ EmitVertex();
+ EndPrimitive();
+ */
+ generate_line(0);
+ generate_line(1);
+ generate_line(2);
+}