Working radial distortion
This commit is contained in:
@@ -1,18 +1,25 @@
|
||||
#version 430 core
|
||||
in vec2 cenPos;
|
||||
in vec2 texPos;
|
||||
in vec2 texDist;
|
||||
in float factor;
|
||||
in float gfactor;
|
||||
in vec2 vcpos;
|
||||
out vec4 fColor;
|
||||
layout (binding = 1) uniform sampler2D screenTexture;
|
||||
float f ( float x) {
|
||||
return max (1, 1 / (2 * x + 0.5)) ;
|
||||
// return min (1, x) ;
|
||||
//return max (1, 1 / (2 * x + 0.5)) ;
|
||||
//return min (1, x) ;
|
||||
if (x>1) {return 1;} else {return (1-gfactor)*x + gfactor;}
|
||||
//if (x>1) {return 1;} else {return 0.5;}
|
||||
}
|
||||
void main()
|
||||
{
|
||||
vec4 tColor = vec4(texture(screenTexture , texPos) );
|
||||
float t = distance(cenPos,texDist);
|
||||
fColor = vec4(tColor.xy,t,tColor.w);
|
||||
//, cenPos + f(distance(cenPos,texDist)) * (texPos - cenPos))) ;
|
||||
float t = f(length(texDist));
|
||||
fColor = vec4(texture(screenTexture
|
||||
, 0.5+0.5 *( vcpos + t * (texPos - vcpos))
|
||||
)
|
||||
);
|
||||
//vec4 tColor = vec4(texture(screenTexture , cpos + (texPos - cpos)) );
|
||||
//float t = distance(cenPos,texPos);
|
||||
//fColor = vec4(tColor.xy,t,tColor.w);
|
||||
//fColor = tColor;
|
||||
}
|
||||
|
||||
+20
-22
@@ -3,45 +3,43 @@ layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
in vec2 vRad1[];
|
||||
in vec2 vRad2[];
|
||||
in vec2 vCen[];
|
||||
in float vFactor[];
|
||||
out vec2 cenPos;
|
||||
out vec2 vcpos;
|
||||
out vec2 texPos;
|
||||
out vec2 texDist;
|
||||
out float factor;
|
||||
//const float root = 1 / sqrt(2);
|
||||
const float root = 1;
|
||||
vec2 cpos = gl_in[0].gl_Position.xy;
|
||||
vec2 rad1 = vRad1[0];
|
||||
vec2 rad2 = vRad2[0];
|
||||
vec2 g(float x,float y)
|
||||
out float gfactor;
|
||||
|
||||
vec2 g(float x,float y, vec2 v, vec2 r1, vec2 r2)
|
||||
{ return vec2
|
||||
//(x,y);
|
||||
(dot(rad1-cpos,vec2(x,y)-cpos)
|
||||
,dot(rad2-cpos,vec2(x,y)-cpos)
|
||||
(dot(normalize(r1-v),vec2(x,y)-v) / length(r1-v)
|
||||
,dot(normalize(r2-v),vec2(x,y)-v) / length(r2-v)
|
||||
);
|
||||
}
|
||||
void main() {
|
||||
float factor = vFactor[0];
|
||||
cenPos = cpos;
|
||||
vec2 cpos = vCen[0];
|
||||
//vcpos = 2*cpos - vec2(1,1);
|
||||
vcpos = cpos;
|
||||
vec2 grad1 = vRad1[0];
|
||||
vec2 grad2 = vRad2[0];
|
||||
gfactor = vFactor[0];
|
||||
texPos = vec2(1,1);
|
||||
//texDist = g(root,root);
|
||||
texDist = vec2(root,root);
|
||||
texDist = g(1,1,cpos,grad1,grad2);
|
||||
gl_Position = vec4 (1,1,0,1);
|
||||
//gl_Position = vec4 (cenPos,0,1);
|
||||
EmitVertex();
|
||||
texPos = vec2(1,0);
|
||||
//texDist = g(root,-root);
|
||||
texDist = vec2(root,-root);
|
||||
texPos = vec2(1,-1);
|
||||
texDist = g(1,-1,cpos,grad1,grad2);
|
||||
gl_Position = vec4 (1,-1,0,1);
|
||||
EmitVertex();
|
||||
texPos = vec2(0,1);
|
||||
//texDist = g(-root,root);
|
||||
texDist = vec2(-root,root);
|
||||
texPos = vec2(-1,1);
|
||||
texDist = g(-1,1,cpos,grad1,grad2);
|
||||
gl_Position = vec4 (-1,1,0,1);
|
||||
EmitVertex();
|
||||
texPos = vec2(0,0);
|
||||
//texDist = g(-root,-root);
|
||||
texDist = vec2(-root,-root);
|
||||
texPos = vec2(-1,-1);
|
||||
texDist = g(-1,-1,cpos,grad1,grad2);
|
||||
gl_Position = vec4 (-1,-1,0,1);
|
||||
EmitVertex();
|
||||
EndPrimitive();
|
||||
|
||||
@@ -4,14 +4,18 @@ layout (location = 1) in vec2 rad1;
|
||||
layout (location = 2) in vec2 rad2;
|
||||
layout (location = 3) in float factor;
|
||||
layout (std140, binding = 0) uniform TheMat { mat4 theMat; } ;
|
||||
out vec2 vCen;
|
||||
out vec2 vRad1;
|
||||
out vec2 vRad2;
|
||||
out float vFactor;
|
||||
void main()
|
||||
{
|
||||
gl_Position = theMat * vec4(pos,0,1);
|
||||
//gl_Position = vec4(1,1,0,1);
|
||||
gl_Position = vec4(0,0,0,1);
|
||||
vCen = (theMat * vec4(pos,0,1)).xy;
|
||||
//vCen = (theMat * vec4(0,0,0,1)).xy;
|
||||
vRad1 = (theMat * vec4(rad1,0,1)).xy;
|
||||
//vRad1 = (theMat * vec4(0,200,0,1)).xy;
|
||||
vRad2 = (theMat * vec4(rad2,0,1)).xy;
|
||||
//vRad2 = (theMat * vec4(200,0,0,1)).xy;
|
||||
vFactor = factor;
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ defaultWorld = World
|
||||
, _inventoryMode = TopInventory
|
||||
, _lClickHammer = HammerUp
|
||||
, _foregroundDecorations = []
|
||||
, _radDistortion = [((00,400),(0,80),(40,40),0.5)]
|
||||
, _radDistortion = [((-20,120),(60,120),(-20,40),0.5)]
|
||||
}
|
||||
defaultDebugFlags :: DebugFlags
|
||||
defaultDebugFlags = DebugFlags
|
||||
|
||||
+2
-1
@@ -146,9 +146,10 @@ doDrawing pdata w = do
|
||||
clear [ColorBuffer]
|
||||
activeTexture $= TextureUnit 1
|
||||
textureBinding Texture2D $= Just (snd $ _fboBase pdata)
|
||||
bufferUBO $ perspectiveMatrixb rot camzoom trans wins viewFroms
|
||||
nraddist <- F.foldM (pokeShader $ _barrelShader pdata) (map Render2221 $ _radDistortion w)
|
||||
bindShaderBuffers [_barrelShader pdata] [nraddist]
|
||||
drawShader (_barrelShader pdata) 4
|
||||
drawShader (_barrelShader pdata) nraddist
|
||||
activeTexture $= TextureUnit 0
|
||||
|
||||
-- draw overlay
|
||||
|
||||
Reference in New Issue
Block a user