mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-02-08 14:03:22 +01:00
91 lines
1.7 KiB
GLSL
91 lines
1.7 KiB
GLSL
/*{
|
|
"pixelRatio" : 3
|
|
}*/
|
|
|
|
precision mediump float;
|
|
uniform float time;
|
|
uniform vec2 resolution;
|
|
|
|
float rep(float p, float d) {
|
|
return mod(p-d*.5, d)-d*.5;
|
|
}
|
|
|
|
vec3 rep(vec3 p, float d) {
|
|
return mod(p-d*.5, d)-d*.5;
|
|
}
|
|
|
|
void mo(inout vec2 p, vec2 d){
|
|
p.x = abs(p.x) - d.x;
|
|
p.y = abs(p.y) - d.y;
|
|
if(p.y>p.x)p=p.yx;
|
|
}
|
|
|
|
void amod(inout vec2 p, float m) {
|
|
float a = rep(atan(p.x, p.y), m);
|
|
p = vec2(cos(a), sin(a)) * length(p);
|
|
}
|
|
|
|
vec2 path(float t) {
|
|
float a =sin(t*.2+1.5), b=cos(t*.2);
|
|
return vec2(a*2., a*b);
|
|
}
|
|
|
|
vec3 g;
|
|
|
|
float sc(vec3 p) {
|
|
p = abs(p);
|
|
p = max(p, p.yzx);
|
|
return min(p.x, min(p.y, p.z)) - .02;
|
|
}
|
|
|
|
float de(vec3 p){
|
|
p.xy -= path(p.z);
|
|
|
|
amod(p.xy, 3.14);
|
|
mo(p.xy, vec2(.3, 3.));
|
|
mo(p.xy, vec2(.9, .3));
|
|
float d = length(p.xy) - .03;
|
|
d = min(d, length(rep(p, 4.)) - .1);
|
|
|
|
amod(p.xy, .785);
|
|
mo(p.zy, vec2(1., 1.2));
|
|
p.z = rep(p.z, 1.);
|
|
d = min(d, sc(p));
|
|
|
|
vec3 q = p;
|
|
mo(q.xy, vec2(3., 2.));
|
|
q = rep(q, 10.);
|
|
d = min(d, sc(q));
|
|
|
|
g += vec3(.5, .6, .5) * .025 / (.01+d*d);
|
|
return d;
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 uv = gl_FragCoord.xy / resolution -.5;
|
|
uv.x *= resolution.x / resolution.y;
|
|
|
|
float dt = time*6.;
|
|
vec3 ro = vec3(0, 0, -4. + dt);
|
|
vec3 ta = vec3(0, 0, dt);
|
|
ro.xy += path(ro.z);
|
|
ta.xy += path(ta.z);
|
|
vec3 fwd = normalize(ta - ro);
|
|
vec3 left = cross(vec3(0, 1, 0), fwd);
|
|
vec3 up = cross(fwd, left);
|
|
vec3 rd = normalize(fwd+uv.x*left+uv.y*up);
|
|
|
|
float ri, t = 0.;
|
|
for(float i=0.;i<1.;i+=.01){
|
|
ri=i;vec3 p = ro+rd*t;
|
|
float d = de(p);
|
|
if(d<.001||t>100.) break;
|
|
t+=d*.2;
|
|
}
|
|
|
|
vec3 c = mix(vec3(.9, .2, .4), vec3(.3, cos(time)*.1, .2), uv.x+ri);
|
|
c.r *= sin(time);
|
|
c += g*.02;
|
|
gl_FragColor = vec4(c, 1);
|
|
}
|