mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-02-15 01:09:46 +01:00
86 lines
1.5 KiB
GLSL
86 lines
1.5 KiB
GLSL
|
|
precision mediump float;
|
|
|
|
uniform float time;
|
|
uniform vec2 resolution;
|
|
|
|
|
|
mat2 rot (float a)
|
|
{
|
|
float c = cos(a);
|
|
float s = sin(a);
|
|
return mat2(c,s,-s,c);
|
|
}
|
|
|
|
vec2 moda (vec2 p, float per)
|
|
{
|
|
float a = atan(p.y,p.x);
|
|
float l = length(p);
|
|
a = mod(a-per/2.,per)-per/2.;
|
|
return vec2(cos(a),sin(a))*l;
|
|
}
|
|
|
|
vec3 palette (float t, vec3 a, vec3 b, vec3 c, vec3 d)
|
|
{
|
|
return a+b*cos(2.*3.141592*(c*t+d));
|
|
}
|
|
float sdSphere (vec3 p, float r) { return length(p) - r; }
|
|
|
|
float box (vec3 p, vec3 c)
|
|
{
|
|
return length(max(abs(p)-c,0.));
|
|
}
|
|
|
|
float prim (vec3 p)
|
|
{
|
|
float c = box(p,vec3 (1.));
|
|
float s = sdSphere(p, sin(time)*0.3+1.3);
|
|
return max(-s,c);
|
|
}
|
|
|
|
float prim2 (vec3 p)
|
|
{
|
|
float per = 1.2;
|
|
p.y = mod(p.y-per/2.,per)-per/2.;
|
|
return prim(p);
|
|
}
|
|
|
|
float tent (vec3 p) {
|
|
p.xz *= rot(3.141592/2.);
|
|
p.yz = moda(p.yz, 2.*3.141592/8.);
|
|
p.x += sin(p.y+time);
|
|
return prim2(p);
|
|
}
|
|
|
|
float map(vec3 p)
|
|
{
|
|
p.xz *= rot(time);
|
|
p.yz *= rot(time*0.5);
|
|
p.xz = moda(p.xz, 2.*3.141592/5.);
|
|
return tent(p);
|
|
}
|
|
|
|
void main () {
|
|
vec2 uv = (gl_FragCoord.xy-.5*resolution.xy)/resolution.y;
|
|
vec3 ray = normalize(vec3(uv*2.,1.));
|
|
vec3 pos = vec3(0.001,0.001,-16.);
|
|
float shade = 0.;
|
|
for (float i = 0.; i <= 70.; i ++) {
|
|
float dist = map(pos);
|
|
if (dist < .001)
|
|
{
|
|
shade = i/60.;
|
|
break;
|
|
}
|
|
pos += dist * ray*0.5;
|
|
}
|
|
|
|
vec3 pal = palette(length(pos),
|
|
vec3(0.5),
|
|
vec3(0.5),
|
|
vec3(0.2),
|
|
vec3(0.0,0.1,0.5));
|
|
vec3 color = vec3(shade)*pal;
|
|
gl_FragColor = vec4(pow(color,vec3(0.45)), 1);
|
|
}
|