WebGL Lab.
// title: sketch-2020-01-24-15-38 // author: yue precision mediump float; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; void main(){ float s=sin(u_time); float c=cos(u_time); vec2 p=gl_FragCoord.xy/u_resolution.xy; vec2 r=p; p=fract(p*3.+u_time*.5); vec3 color=p.y+.2*s>.5?vec3(1.):vec3(-1.); color*=p.x+.2*s-.5; color*=p.x+.2*c-.3; color*=p.y+.2*c-.5; color*=p.x+.2*s-p.y; color*=p.y+.2*s-p.x; color*=p.y+p.x+.2*s-.8; color*=p.y+p.x+.2*c-1.2; color*=distance(p,vec2(.5*abs(c)))-.3-.1*s; color*=distance(p,vec2(.5*abs(s)))-.1-.4*abs(c); color*=r.x+.2*c-.5; color*=r.x+.2*s-.3; color*=r.y+.2*s-.5; color*=r.x+.2*s-p.y; color*=r.y+.2*c-p.x; color*=r.y+p.x+.2*c-.8; color*=r.y+p.x+.2*s-1.2; color*=distance(r,vec2(.5))-.4>0.?0.:1.; color=color.x>0.?r.yxx:vec3(0.); gl_FragColor=vec4(color,1.); }