diff --git a/vis/shaders/curve-stereo.gm.glsl b/vis/shaders/curve-stereo.gm.glsl index 748a17b..c60b840 100644 --- a/vis/shaders/curve-stereo.gm.glsl +++ b/vis/shaders/curve-stereo.gm.glsl @@ -31,6 +31,7 @@ void main() { for (int i = 0; i < SUBS; i++) { vpos = mix(gpos[0], gpos[1], i * 1.0f / (SUBS - 1)); vpos = normalize(vpos); + gl_Position = proj * stereo(vpos); EmitVertex(); } diff --git a/vis/shaders/diffuse.fs.glsl b/vis/shaders/diffuse.fs.glsl index ae05d4e..d8cc3fe 100644 --- a/vis/shaders/diffuse.fs.glsl +++ b/vis/shaders/diffuse.fs.glsl @@ -1,9 +1,14 @@ #version 430 -in vec4 col; +layout(location=1) in vec4 col; +layout(location=2) in vec3 normal; out vec4 color; void main() { + float bright = dot(normal, normalize(vec3(-0.6, 1, 2))); + bright = .6 + .3 * bright; + color = col; + color.xyz *= bright; } diff --git a/vis/shaders/slice/slice.gm.glsl b/vis/shaders/slice/slice.gm.glsl index a7c81d9..0bbda61 100644 --- a/vis/shaders/slice/slice.gm.glsl +++ b/vis/shaders/slice/slice.gm.glsl @@ -15,8 +15,9 @@ layout(std140, binding=1) uniform Matrices { in ivec4 vInds[]; in vec4 vCol[]; -out vec4 pos; -out vec4 col; +layout(location=0) out vec4 pos; +layout(location=1) out vec4 col; +layout(location=2) out vec3 normal; out gl_PerVertex { vec4 gl_Position; @@ -60,6 +61,17 @@ void main() { sect[S++] = mix(a, b, t); } + normal = cross(sect[1].xyz - sect[0].xyz, sect[2].xyz - sect[0].xyz); + normal = normalize(normal); + + float r = dot(normal, sect[0].xyz); + + if (abs(r) < 0.001) + r = dot(normal, sect[0].xyz + vec3(0, 0, 1)); + + if (r < 0) + normal *= -1; + for (int s = 0; s < S; ++s) { emit(sect[s]); } diff --git a/vis/shaders/solid.fs.glsl b/vis/shaders/solid.fs.glsl index 11f3ec0..37b0d5a 100644 --- a/vis/shaders/solid.fs.glsl +++ b/vis/shaders/solid.fs.glsl @@ -7,6 +7,8 @@ in vec4 pos; out vec4 color; void main() { + if (pos.w > 0.8) discard; + float d = smoothstep(-2, 2, pos.z); color = vec4(c * d, 1); }