xxxxxxxxxx
54
precision mediump float;
varying vec2 pos;
const float maxJitter = 0.1;
const float maxMvmt = 0.05;
const float cellSize = 0.1;
const float noiseOffset = 10.0;
uniform vec3 peakColour;
uniform vec3 troughColour;
uniform float seconds;
uniform float seed;
float rand(vec2 co, float salt){
return fract(sin(dot(co, vec2(12.9898, 78.233) + salt + seed)) * 43758.5453);
}
vec2 pointPos(float i, float j) {
float offX = cos(seconds + i * 3.14) * maxMvmt;
float offY = sin(seconds + j * 3.14) * maxMvmt;
float x = i + rand(vec2(i, j) + noiseOffset, 0.0) * maxJitter + offX;
float y = j + rand(vec2(i, j) + noiseOffset, 1.0) * maxJitter + offY;
return vec2(x, y);
}
void main() {
float minDist = 2.0;
vec2 currentCell = floor(pos/cellSize) * cellSize;
// Find min dist to one of the surrounding grid points
for(float i = -2.0; i <= 2.0; i ++) {
for(float j = -2.0; j <= 2.0; j ++) {
float cellX = currentCell.x + (i * cellSize);
float cellY = currentCell.y + (j * cellSize);
vec2 point = pointPos(cellX, cellY);
float dist = distance(pos, point)/cellSize;
minDist = min(dist, minDist);
}
}
minDist = minDist * minDist;
vec3 colour = mix(troughColour, peakColour, minDist);
// colour = vec3(currentCell.xy, 1.0);
gl_FragColor = vec4(colour, 0.5);
}