mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-02-01 18:39:35 +01:00
81 lines
1.6 KiB
GLSL
81 lines
1.6 KiB
GLSL
/*
|
|
"pixelRatio" : 1
|
|
*/
|
|
|
|
precision mediump float;
|
|
uniform float time;
|
|
uniform vec2 resolution;
|
|
|
|
float smin( float a, float b)
|
|
{
|
|
float k = 2.;
|
|
return -log( exp(-k*a) + exp(-k*b) )/k;
|
|
}
|
|
|
|
vec4 obj[4];
|
|
|
|
float map( vec3 p)
|
|
{
|
|
float t = time + floor(p.x/5.-2.5)*.5 + floor(p.z/10.-5.);
|
|
obj[0] = vec4( cos(t*1.5),cos(t),cos(t*1.4),.25);
|
|
obj[2] = vec4( cos(t*2.),cos(t),cos(t*.5),.125);
|
|
obj[1] = vec4( cos(t),cos(t*.4),cos(t),.25);
|
|
obj[3] = vec4( cos(t*1.),sin(t),cos(t),1.);
|
|
p.xz = mod(p.xz, vec2(10.))-vec2(5.);
|
|
float d = p.y+2.;
|
|
d = smin(d, length(p-obj[0].xyz) - obj[0].w);
|
|
d = smin(d, length(p-obj[1].xyz) - obj[1].w);
|
|
d = smin(d, length(p-obj[2].xyz) - obj[2].w);
|
|
d = smin(d, length(p-obj[3].xyz) - obj[3].w);
|
|
return d;
|
|
}
|
|
|
|
vec3 normal(vec3 p)
|
|
{
|
|
vec2 eps = vec2(0.01,0.);
|
|
float d = map(p);
|
|
vec3 n;
|
|
n.x = d - map(p-eps.xyy);
|
|
n.y = d - map(p-eps.yxy);
|
|
n.z = d - map(p-eps.yyx);
|
|
return normalize(n);
|
|
}
|
|
|
|
vec3 rm(vec3 ro, vec3 rd)
|
|
{
|
|
vec3 p = ro;
|
|
for(int i=0; i<128; i++)
|
|
{
|
|
float d = map(p);
|
|
p += rd *d;
|
|
|
|
}
|
|
return p;
|
|
}
|
|
|
|
void main(void) {
|
|
vec2 uv = gl_FragCoord.xy / resolution -.5;
|
|
uv.x *= resolution.x / resolution.y;
|
|
|
|
vec3 ro = vec3(0.,1.,-10.);
|
|
vec3 rd = normalize(vec3(uv, 1.));
|
|
|
|
vec3 p = rm(ro,rd);
|
|
vec3 n = normal(p);
|
|
|
|
vec3 ld = normalize(vec3(-1.,.5,.1));
|
|
|
|
|
|
float shadow = 1.;
|
|
|
|
vec3 pp = rm(p+ld*.1, ld);
|
|
|
|
vec3 col = vec3(1.) * max(0., dot(ld,n));
|
|
if(length(p-pp)<10.)
|
|
shadow = 0.;
|
|
//col *= sign(cos(p.y*10.);
|
|
col *= shadow;
|
|
col = clamp(col,vec3(0.),vec3(1.)) + vec3(1.,.7,.5)*min(1.,length(p-ro)*.03);
|
|
gl_FragColor = vec4(col, 1);
|
|
}
|