mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-07-19 15:46:01 +02:00
84 lines
1.7 KiB
GLSL
84 lines
1.7 KiB
GLSL
|
|
precision mediump float;
|
|
|
|
uniform vec2 resolution;
|
|
uniform float time;
|
|
|
|
|
|
vec3 lookat (vec3 eye, vec3 at, vec2 uv) {
|
|
vec3 front = normalize(at-eye);
|
|
vec3 right = normalize(cross(front, vec3(0,1,0)));
|
|
vec3 up = normalize(cross(front, right));
|
|
return normalize(front + right * uv.x + up * uv.y);
|
|
}
|
|
|
|
mat2 rot (float a) {
|
|
float c = cos(a), s = sin(a);
|
|
return mat2(c,-s,s,c);
|
|
}
|
|
|
|
float smin (float a, float b, float r) {
|
|
float h = clamp(.5+.5*(b-a), 0., 1.);
|
|
return mix(b,a,h)-r*h*(1.-h);
|
|
}
|
|
|
|
float repeat( float p, float c) { return mod(p,c)-c/2.; }
|
|
float box(vec3 p, vec3 b) {
|
|
b=abs(p)-b;
|
|
return min(max(b.x, max(b.y, b.z)),0.) + length(max(b, 0.));
|
|
}
|
|
float sc(vec3 p,float d){
|
|
p=abs(p);p=max(p,p.yzx);
|
|
return min(p.x,min(p.y,p.z))-d;
|
|
}
|
|
|
|
mat2 r2d(float a){float c=cos(a),s=sin(a);return mat2(c,s,-s,c);}
|
|
vec3 re(vec3 p, float d){return mod(p-d*.5,d)-d*.5;}
|
|
float g=0.;
|
|
float de(vec3 p){
|
|
//p.y+=.5;
|
|
|
|
float t = time*6.;
|
|
float s1 = .77+2.5*(t*.1+sin(t)*.1);
|
|
p.xz*=r2d(s1);
|
|
p.xy*=r2d(s1);
|
|
|
|
|
|
float d= box(p, vec3(1));
|
|
|
|
float s=1.;
|
|
vec3 q = p;
|
|
|
|
for(int m=0;m<3;m++) {
|
|
q = re(p*s, 2.);
|
|
s*=3.;
|
|
d = max(d, -sc(2.-abs(q)*3., 1.)/s);
|
|
}
|
|
|
|
d = min(d, sc(1.-abs(q), .1));
|
|
g+=.01/(.01+d*d);
|
|
return d;
|
|
return sc(p,.3);
|
|
return length(p)-1.;
|
|
}
|
|
void main () {
|
|
vec2 uv = gl_FragCoord.xy / resolution;
|
|
uv -= .5;
|
|
uv.x *= resolution.x / resolution.y + tan(time)*.4;
|
|
|
|
vec3 ro=vec3(0,0,-2),rd=normalize(vec3(uv,.7-length(uv))),p;
|
|
float ri,t=0.;
|
|
for(float i=0.;i<1.;i+=.01) {
|
|
ri=i;
|
|
p = ro+rd*t;
|
|
float d = de(p);
|
|
//if(d<.001)break;
|
|
d = max(abs(d), .002);
|
|
t+=d*.5;
|
|
}
|
|
vec3 c = mix(vec3(.1, .3, .3), vec3(.1, .1, .2), length(uv*2.)+ri);
|
|
c.r+=(sin(time*4.)*.5+.5)*.1;
|
|
c+=g*.007;
|
|
gl_FragColor = vec4(c, 1);
|
|
}
|