
#define rotate2D(x) mat2(cos(x-1.57*vec4(0,1,-1,0)))
#define t 0.5*iTime
#define r iResolution

void mainImage (out vec4 o, in vec2 c)
{ vec3 z=vec3(0,0,66), q=z, p, u, v;
  for(float w,d,i=0.; i++<48.;
    v=u, u=q,
    q+=(vec3(c,0)*2.-r.xyx)/r.x*d+vec3(sin(i),cos(i),0)) // sin,cos = spiral offs in x,y
  for(d=w=7.;w>0.;w-=1.26)
  { p=q;
    p.xz*=rotate2D(t+w);
    p.xy*=rotate2D(1.5+sin(t));
    d=min(d,dot(p+sin(p)*.2,sign(p)*.3)-9.);
  }
  u=cross(q-u,q-v); // normal = cross product of 2 triangle edges (last 3 step points u,v,q)
  o.xyz=texture(iChannel0,reflect(q-z,u)).xyz-u*.1;
}
