xxxxxxxxxx
57
precision mediump float;
uniform float time;
uniform float texSize;
uniform sampler2D colorTexture;
uniform sampler2D depth;
uniform float mouseX;
uniform float mouseY;
varying vec2 vTexCoord;
varying vec3 vNormal;
varying float vCull;
void main(){
vec3 normal = texture2D(colorTexture,vTexCoord).xyz * 2.0 - 1.0;
vec3 color = max(normal,0.0);
vec3 cmy;
cmy.r = 1.0 - max(color.r-color.g-color.b, 0.0);
cmy.g = 1.0 - max(color.g-color.r-color.b, 0.0);
cmy.b = 1.0 - max(color.b-color.r-color.g, 0.0);
vec2 absCoord = vTexCoord * texSize;
float alphaHelper = 0.0;
for ( float i = -3.0; i < 4.0; i+=2.0 )
{
float depthDist = length(texture2D(depth, vTexCoord).xyz -
texture2D(depth, vec2(absCoord.x + max(i,0.0) - 2.0 * sign(max(i,0.0)),
absCoord.y + max(i,0.0) - 2.0 * sign(max(i,0.0)))
/texSize ).xyz);
// float normalDist = length(normal -
// (texture2D(colorTexture, vec2(absCoord.x + max(i,0.0) - 2.0 * sign(max(i,0.0)),
// absCoord.y + max(i,0.0) - 2.0 * sign(max(i,0.0)))
// /texSize ).xyz * 2.0 - 1.0));
float normalDist = dot(normal,
(texture2D(colorTexture, vec2(absCoord.x + max(i,0.0) - 2.0 * sign(max(i,0.0)),
absCoord.y + max(i,0.0) - 2.0 * sign(max(i,0.0)))
/texSize ).xyz * 2.0 - 1.0));
if(depthDist > 0.01 || normalDist < cos(1.5))
{
cmy = vec3(0.0);
alphaHelper = 1.0;
}
}
gl_FragColor = vec4(cmy * (texture2D(colorTexture,vTexCoord).xyz + texture2D(colorTexture,vTexCoord).a), texture2D(colorTexture,vTexCoord).a);
}