1 // Fragment shader for metaballs
3 precision mediump float;
4 varying vec2 vTexCoord;
5 uniform vec2 uPositionMetaball;
6 uniform vec2 uPositionVar;
7 uniform vec2 uGravityVector;
9 uniform float uRadiusVar;
10 uniform float uAspect;
14 vec2 adjustedCoords = vTexCoord * 2.0 - 1.0;
15 vec2 finalMetaballPosition = uPositionMetaball + uGravityVector + uPositionVar;
17 float distance = (adjustedCoords.x - finalMetaballPosition.x) * (adjustedCoords.x - finalMetaballPosition.x) +
18 (adjustedCoords.y - finalMetaballPosition.y) * (adjustedCoords.y - finalMetaballPosition.y);
19 float finalRadius = uRadius + uRadiusVar;
20 float color = finalRadius / sqrt( distance );
21 vec2 bordercolor = vec2(0.0,0.0);
22 if (vTexCoord.x < 0.1)
24 bordercolor.x = (0.1 - vTexCoord.x) * 0.8;
26 if (vTexCoord.x > 0.9)
28 bordercolor.x = (vTexCoord.x - 0.9) * 0.8;
30 if (vTexCoord.y < 0.1)
32 bordercolor.y = (0.1 - vTexCoord.y) * 0.8;
34 if (vTexCoord.y > (0.9 * uAspect))
36 bordercolor.y = (vTexCoord.y - (0.9 * uAspect)) * 0.8;
38 float border = (bordercolor.x + bordercolor.y) * 0.5;
39 gl_FragColor = vec4(color + border,color + border,color + border,1.0);