Improve shadows for static walls

This commit is contained in:
jgk
2021-03-05 13:40:34 +01:00
parent e4c51bc47a
commit 5f8b5881e5
8 changed files with 62 additions and 34 deletions
+35 -17
View File
@@ -1,29 +1,47 @@
#version 430 core
layout (points) in;
layout (triangle_strip, max_vertices = 4) out;
layout (triangle_strip, max_vertices = 8) out;
//in vec4 vBackPoss[];
in vec4 vBackPoss[];
uniform vec2 lightPos;
uniform mat4 worldMat;
void emitLine (vec2 pa)
{
gl_Position = vec4 (pa, 0, 1);
EmitVertex();
gl_Position = vec4 (pa + (200 * (pa - lightPos)), 0 , 1);
EmitVertex();
}
float isLHS (vec2 startV, vec2 testV)
{
return sign( -startV.x * testV.y + startV.y * testV.x);
}
void main()
{
vec4 posaa = worldMat * vec4(gl_in[0].gl_Position.xy, 0 ,1);
vec4 posba = worldMat * vec4(gl_in[0].gl_Position.zw, 0 ,1);
vec2 posa = posaa.xy;
vec2 posb = posba.xy;
vec4 frontL4 = worldMat * vec4(gl_in[0].gl_Position.xy, 0 ,1);
vec4 frontR4 = worldMat * vec4(gl_in[0].gl_Position.zw, 0 ,1);
vec2 frontL = frontL4.xy;
vec2 frontR = frontR4.xy;
vec4 backR4 = worldMat * vec4(vBackPoss[0].xy, 0 ,1);
vec4 backL4 = worldMat * vec4(vBackPoss[0].zw, 0 ,1);
vec2 backL = backL4.xy;
vec2 backR = backR4.xy;
// vec2 posc = vBackPoss[0].xy;
// vec2 posd = vBackPoss[0].zw;
gl_Position = vec4 (posb, 0 , 1);
EmitVertex();
gl_Position = vec4 (posb + (200 * (posb - lightPos)), 0 , 1);
EmitVertex();
gl_Position = vec4 (posa, 0 , 1);
EmitVertex();
gl_Position = vec4 (posa + (200 * (posa - lightPos)), 0 , 1);
EmitVertex();
if (isLHS( lightPos - frontL, frontR - frontL) < 0)
{
emitLine (backL);
emitLine (frontL);
emitLine (frontR);
emitLine (backR);
}
else
{
emitLine (backR);
emitLine (backL);
}
EndPrimitive();
}
+3 -3
View File
@@ -1,8 +1,8 @@
#version 430 core
layout (location = 0) in vec4 poss;
//layout (location = 1) in vec4 backPoss;
layout (location = 1) in vec4 backPoss;
//out vec4 vBackPoss;
out vec4 vBackPoss;
//uniform vec2 winSize;
//uniform float zoom;
@@ -13,5 +13,5 @@ layout (location = 0) in vec4 poss;
void main()
{
gl_Position = poss;
// vBackPoss = backPoss;
vBackPoss = backPoss;
}