Commit before attempting to use volume shadows for walls

This commit is contained in:
jgk
2021-03-18 18:41:16 +01:00
parent 5ea831203a
commit 7324ed5eee
3 changed files with 89 additions and 0 deletions
+10
View File
@@ -0,0 +1,10 @@
#version 430 core
in vec2 vDistField;
in float vLum;
out vec4 fColor;
void main()
{
float l = dot(vDistField,vDistField);
fColor = vec4 (pow(1 - l,2),0,0,1);
}
+55
View File
@@ -0,0 +1,55 @@
#version 430 core
layout (lines) in;
layout (triangle_strip, max_vertices = 14) out;
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 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;
// if (isLHS( lightPos - frontL, frontR - frontL) < 0)
// // if (isLHS( lightPos - backL, backR - backL) < 0)
// {
// // emitLine (frontL);
// // emitLine (backL);
// // emitLine (frontL);
// // emitLine (frontR);
// // emitLine (backR);
// // emitLine (frontR);
//
// emitLine (backR);
// emitLine (backL);
// }
// else
// {
// emitLine (backR);
// emitLine (backL);
// }
emitLine (frontR);
emitLine (frontL);
EndPrimitive();
}
+24
View File
@@ -0,0 +1,24 @@
#version 430 core
layout (location = 0) in vec3 pos;
out vec2 vDistField;
out float vLum;
uniform mat4 worldMat;
uniform vec4 lightPosRadLum;
mat4 perspective =
mat4 (1,0,0,0
,0,1,0,0
,0,0,1,1
,0,0,0,1
) ;
void main()
{
float r = lightPosRadLum.z ;
float x = lightPosRadLum.x ;
float y = lightPosRadLum.y ;
gl_Position = perspective * worldMat * vec4(pos, 1);
vDistField = vec2 ( (pos.x - x)/r , (pos.y - y)/(r*100) ) ;
vLum = lightPosRadLum.w;
}