mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-02-02 02:49:50 +01:00
50 lines
1.3 KiB
GLSL
50 lines
1.3 KiB
GLSL
|
|
precision mediump float;
|
|
|
|
uniform float time;
|
|
uniform vec2 resolution;
|
|
|
|
float sdSphere (vec3 p, float r) { return length(p) - r; }
|
|
|
|
float sdCube(vec3 p, float r) { return min(abs(p.x - 0.5) * mod(time, 0.2), abs(p.y - 0.5) * mod(time, 0.6)); }
|
|
|
|
float map (vec3 pos) {
|
|
float scene = 1000.;
|
|
scene = min(scene, sdCube(pos, 0.4));
|
|
return scene;
|
|
}
|
|
|
|
vec3 lookAt (vec3 eye, vec3 at, vec2 uv) {
|
|
vec3 forward = normalize(at - eye);
|
|
vec3 right = normalize(cross(forward, vec3(0,1,0)));
|
|
vec3 up = normalize(cross(right, forward));
|
|
return normalize(forward + right * uv.x + up * uv.y);
|
|
}
|
|
|
|
void main () {
|
|
vec2 uv = (gl_FragCoord.xy-.5*resolution.xy)/resolution.y;
|
|
vec3 eye = vec3(0,1,-3);
|
|
vec3 ray = lookAt(eye, vec3(0), uv);
|
|
vec3 pos = eye;
|
|
float shade = 0.;
|
|
for (float SpherePos = -0.8; SpherePos < 0.8; SpherePos += 0.2)
|
|
{
|
|
for (float i = 0.; i <= 1.; i += 1./60.) {
|
|
float dist = sdCube(pos, 0.5);
|
|
dist = dist * sdSphere(pos, 0.1);
|
|
//dist += sdSphere(pos, 0.8);
|
|
pos += mod(time, 0.2);
|
|
dist += sdSphere(vec3(0.9, 0., 0.) + pos, 0.5);
|
|
if (dist < .001) {
|
|
shade = 1.-i;
|
|
break;
|
|
}
|
|
pos += dist * ray;
|
|
}
|
|
}
|
|
|
|
vec3 color = vec3(mod(time, 1.), mod(time, 0.1), mod(time, 0.3));
|
|
color *= shade;
|
|
gl_FragColor = vec4(color, 1);
|
|
}
|