Refactor floor lighting shader with distance field
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
#version 430 core
|
#version 430 core
|
||||||
in vec2 cenPosT;
|
in vec2 cenPosT;
|
||||||
in vec2 gParams;
|
in float lum;
|
||||||
|
|
||||||
|
in vec2 dField;
|
||||||
|
|
||||||
out vec4 fColor;
|
out vec4 fColor;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
vec2 pos = gl_FragCoord.xy;
|
float c = pow (1 - min(1, dot(dField,dField)) , 2) * lum ;
|
||||||
float dist = min(1 , 2*distance(pos,cenPosT) / (gParams.x));
|
|
||||||
float c = gParams.y * pow(1-dist,2);
|
|
||||||
fColor = vec4(c,c,c,c);
|
fColor = vec4(c,c,c,c);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,26 +2,31 @@
|
|||||||
layout (points) in;
|
layout (points) in;
|
||||||
layout (triangle_strip, max_vertices = 4) out;
|
layout (triangle_strip, max_vertices = 4) out;
|
||||||
in vec2 vParams [];
|
in vec2 vParams [];
|
||||||
out vec2 gParams;
|
out float lum;
|
||||||
out vec2 cenPosT;
|
out vec2 cenPosT;
|
||||||
|
out vec2 dField;
|
||||||
|
|
||||||
uniform vec2 winSize;
|
uniform vec2 winSize;
|
||||||
uniform float zoom;
|
uniform float zoom;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
|
lum = vParams[0].y;
|
||||||
vec3 cenPos = gl_in[0].gl_Position.xyz;
|
vec3 cenPos = gl_in[0].gl_Position.xyz;
|
||||||
gParams = vec2( vParams[0].x * zoom * 2, vParams[0].y);
|
float gRad = vParams[0].x * zoom * 2;
|
||||||
float gRad = gParams.x;
|
|
||||||
|
|
||||||
cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y);
|
cenPosT = vec2 ( (cenPos.x + 1) * 0.5 * winSize.x , (cenPos.y + 1) * 0.5 * winSize.y);
|
||||||
|
|
||||||
|
dField = vec2 ( 1, 1);
|
||||||
gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1);
|
gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1);
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
|
dField = vec2 (-1, 1);
|
||||||
gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1);
|
gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y + gRad/winSize.y, -0.2 , 1);
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
|
dField = vec2 ( 1,-1);
|
||||||
gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1);
|
gl_Position = vec4 (cenPos.x + gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1);
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
|
dField = vec2 (-1,-1);
|
||||||
gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1);
|
gl_Position = vec4 (cenPos.x - gRad/winSize.x, cenPos.y - gRad/winSize.y, -0.2 , 1);
|
||||||
EmitVertex();
|
EmitVertex();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user