? infinite ?
Log in to post a comment.
#version 300 es
#define pi 3.1415926
precision highp float;
uniform float iTime;
uniform vec2 iResolution;
out vec4 fragColor;
vec2 vpow2(vec2 v){
return vec2(v.x * v.x - v.y * v.y, 2. * v.x * v.y);
}
vec2 rv(vec2 v, float r){
float a = atan(v.y, v.x);
a += r;
return vec2(cos(a), sin(a)) * length(v);
}
float itr(vec2 c, vec2 z){
int i = 0;
while(length(z) < 8192. && i < 512){
z = vpow2(z) + c;
i++;
}
return float(i) + 1. - log(log(length(z))) / log(2.);
}
vec3 fcol(float it){
if(it < 512.){
return vec3(.5 + .5 * sin(it / 32.), .5 + .5 * sin(it / 48.), .5 + .5 * sin(it / 64.));
}
else{
return vec3(0., 0., 0.);
}
}
void main() {
// Screen coordinate (from [-aspect, -1] to [aspect, 1])
vec2 q = (2. * gl_FragCoord.xy - iResolution) / iResolution.y;
float mzoom = 1.e5;
float ztime = log(mzoom) / log(2.);
float zoom = pow(2., mod(iTime, ztime));
float zphase = mod(iTime / ztime, 1.);
float r = (4. * pi - 4.04) * zphase;
vec2 fractalCoord = vec2(-0.13791936640142570099292214925261, -0.88460568100304538057472153704150);
vec2 c = rv(q * (mzoom / 1.e5) / zoom, r) + fractalCoord;
vec2 c2 = rv(q * mzoom / zoom, r + 4.04) + fractalCoord;
vec2 z = vec2(0., 0.);
float it = itr(c, z);
float it2 = itr(c2, z);
// Pixel color
vec3 col;
vec3 col2;
float w = pow(zphase, 0.9);
col = fcol(it) * (1. - w) * clamp(1. - .2 * it2, 0., 1.);
col += fcol(it2) * w;
// Output
fragColor = vec4(col, 1.);
}