#version 100 precision mediump float; uniform float u_time; uniform vec2 u_resolution; void main() { vec2 uv = (gl_FragCoord.xy * 2.0 - u_resolution.xy) / u_resolution.y; // Auto zoom float zoom = 1.0 + sin(u_time * 0.1) * 0.5; zoom = pow(zoom, 4.0); vec2 c = uv / zoom - vec2(0.74364388703, 0.13182590421); // Zoom into a specific interesting point vec2 z = vec2(0.0); float iter = 0.0; float max_iter = 100.0; for (float i = 0.0; i < 100.0; i++) { z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c; if (length(z) > 4.0) break; iter += 1.0; } float f = iter / max_iter; vec3 col = vec3(f); col = 0.5 + 0.5 * cos(3.0 + f * 10.0 + vec3(0.0, 0.6, 1.0)); if (iter >= 99.0) col = vec3(0.0); gl_FragColor = vec4(col, 1.0); }