uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; #define PI 3.14159265358979323846 vec2 rotate2D(vec2 st, float angle, float view_at=0.5, float origin=0.5) { st -= view_at; st = mat2(cos(angle), -sin(angle), sin(angle), cos(angle)) * st; st += origin; return st; } float box(vec2 st, vec2 size, float smoothEdges) { size = vec2(0.5) - size * 0.5; vec2 aa = vec2(smoothEdges * 0.5); vec2 uv = smoothstep(size, size + aa, st); uv *= smoothstep(size, size+aa, vec2(1.0) - st); return uv.x * uv.y; } vec2 tile(vec2 st, float zoom) { st *= zoom; return fract(st); } float circle(vec2 st, float radius) { vec2 l = st - vec2(0.5); return 1.0 - smoothstep(radius - (radius * 0.01), radius+(radius * 0.01), dot(l,l) * 4.0); } void main() { vec2 st = gl_FragCoord.xy/u_resolution; vec3 color = vec3(0.0); vec2 mouse_at = smoothstep(0.1, 0.9, u_mouse/u_resolution); st = tile(st, 4.0); st = rotate2D(st, PI * sin(u_time) / 4, 0.5, mouse_at); color = vec3(box(st, vec2(0.7), 0.01)); gl_FragColor = vec4(color, 1.0); }