WebGL Lab.
// title: sketch-2020-01-08-00-24 // author: yue #ifdef GL_ES precision mediump float; #endif #define S3 1.73205080757 uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; void t(float r,vec2 center,inout vec3 color,vec2 point,float index){ float dx=abs(center.x-point.x); float ybottom=1.-.5*r-center.y; float ytop=ybottom+(S3*r/3.-dx)*S3; if(dx<S3/2.*r&&point.y>ybottom&&point.y<ytop){ color+=.4*vec3(point,sin(dx+index)); } } void main(){ const float r=.15; vec2 point=gl_FragCoord.xy/u_resolution; vec3 color=vec3(0.); for(float y=0.;y<=6.;y+=1.){ vec2 tp=vec2(.5)+vec2(cos(u_time+y)*r,sin(u_time+y*y)*r); t(.1+.4*abs(sin(u_time+y)),tp,color,point,y); } gl_FragColor=vec4(color,1.); }