1 //Fragment shader code for metaball and background composition with refraction effect
4 varying vec2 vTexCoord;
5 uniform sampler2D sTexture;
6 uniform sampler2D sEffect;
7 uniform vec2 uPositionMetaball;
11 vec3 normal = vec3(0.0,0.0,1.0);
12 vec2 fakePos = vec2(0.0,0.0);
13 vec3 color = vec3(1.0, 1.0, 1.0);
16 vec4 metaColor = texture2D(sEffect, vTexCoord);
18 vec2 adjustedCoords = vTexCoord.xy * vec2(2.0) - vec2(1.0);
19 fakePos = adjustedCoords.xy - vec2(uPositionMetaball.x, -uPositionMetaball.y);
20 float len = length(fakePos) + 0.01;
21 vec3 colorPos = vec3(0,0,1);
23 if (metaColor.r > 0.85)
25 zoomCoords = ((vTexCoord - 0.5) * 0.9);
26 zoomCoords = zoomCoords + 0.5;
28 float interpNormal = mix(0.7, 1.0, (metaColor.r - 0.85) * 4.);
29 normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);
30 normal.xyz = normalize(normal.xyz);
31 color = vec3(0.65, 1.0, 0);
32 colorPos = vec3(fakePos.x,fakePos.y,0);
34 else if (metaColor.r > 0.75)
36 float interpolation = mix(0.9, 1.15, (0.85 - metaColor.r) * 10.0);
37 zoomCoords = ((vTexCoord - 0.5) * interpolation);
38 zoomCoords = zoomCoords + 0.5;
40 float interpNormal = mix(0.7, 0.0, (0.85 - metaColor.r) * 10.0);
41 normal.xyz = vec3(fakePos.x * (1.0 - interpNormal) / len, fakePos.y * (1.0 - interpNormal) / len, interpNormal);
42 normal.xyz = normalize(normal.xyz);
43 color = vec3(0.65, 1.0, 0);
44 colorPos = vec3(fakePos.x,fakePos.y,0);
48 zoomCoords = vTexCoord;
53 vec3 lightPosition = vec3(-750.0,-1000.0,2000.0);
54 vec3 vertex = vec3(adjustedCoords.x,adjustedCoords.y,0.0);
56 vec3 vecToLight = normalize( lightPosition - vertex );
58 float lightDiffuse = dot( vecToLight, normal );
59 lightDiffuse = max(0.0,lightDiffuse);
60 lightDiffuse = lightDiffuse * 0.5 + 0.5;
62 vec3 vertexToEye = vec3(0,0,1) - vertex;
63 vertexToEye = normalize(vertexToEye);
64 vec3 lightReflect = normalize(reflect(-vecToLight, normal));
65 float specularFactor = max(0.0,dot(vertexToEye, lightReflect));
66 specularFactor = pow(specularFactor, 32.0) * 0.7;
68 vec4 texColor = texture2D(sTexture, zoomCoords);
69 gl_FragColor.rgb = texColor.rgb * ambient + color.rgb * texColor.rgb * lightDiffuse + vec3(specularFactor);