mirror of
https://github.com/CookieCollective/Live-Coding-Sources.git
synced 2025-07-19 07:42:32 +02:00
122 lines
2.2 KiB
GLSL
122 lines
2.2 KiB
GLSL
|
|
precision mediump float;
|
|
|
|
uniform float time;
|
|
uniform vec2 resolution;
|
|
|
|
float sdSphere (vec3 p, float r) { return length(p) - r; }
|
|
|
|
mat2 r2d(float a){
|
|
float c = cos(a), s=sin(a);
|
|
return mat2(c, s, -s, c);
|
|
}
|
|
|
|
void lw(inout vec3 p) {
|
|
p.xz *= r2d(time);
|
|
p.xy *= r2d(time);
|
|
//return p;
|
|
}
|
|
|
|
float g=0.;
|
|
float map (vec3 p) {
|
|
|
|
|
|
float pl=p.y+1.;
|
|
lw(p);
|
|
|
|
//float scene = 1000.;
|
|
//scene = min(scene, sdSphere(pos, 1.));
|
|
float d = length(max(abs(p) - .7, 0.));
|
|
d = min(d, pl);
|
|
g+=.01/(.01+d*d);
|
|
return d;
|
|
}
|
|
|
|
|
|
|
|
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);
|
|
}
|
|
|
|
vec3 tex(vec2 p){
|
|
float pl=1., o=0.;
|
|
float t = sin(time*20.);
|
|
float a = -.35 + t*.02;
|
|
|
|
p.x *=1.2;
|
|
p*=r2d(a);
|
|
|
|
p*=.07;
|
|
p+=vec2(.71, t*.014 - .56) + t*.017;
|
|
for(int i=0;i<13;i++) {
|
|
p.x = abs(p.x);
|
|
p*=2.;
|
|
p+=vec2(-2., .85) - t*.04;
|
|
p /= min(dot(p,p), 1.03);
|
|
float l = length(p*p);
|
|
o += exp(-1.2 / abs(l-pl));
|
|
pl = l;
|
|
}
|
|
|
|
o*=.07;
|
|
o*=o;
|
|
|
|
return vec3(.8, .8*o, o*o*.9) * o * 2. + .1;
|
|
}
|
|
|
|
vec3 normal(vec3 p) {
|
|
vec2 e = vec2(.01, 0.);
|
|
return normalize(vec3(
|
|
map(p+e.xyy) - map(p-e.xyy),
|
|
map(p+e.yxy) - map(p-e.yxy),
|
|
map(p+e.yyx) - map(p-e.yyx)
|
|
));
|
|
}
|
|
|
|
vec3 boxmap(vec3 p, vec3 n) {
|
|
vec3 m = pow(n, vec3(32.));
|
|
vec3 x = tex(p.yz);
|
|
vec3 y = tex(p.zx);
|
|
vec3 z = tex(p.xy);
|
|
return (m.x*x, m.y*y, m.z*z) / (m.x+m.y+m.z);
|
|
|
|
}
|
|
|
|
void main () {
|
|
// vec2 uv = (gl_FragCoord.xy-.5*resolution.xy)/resolution.y;
|
|
vec2 uv = (gl_FragCoord.xy/resolution.xy) - .5;
|
|
uv.x *= resolution.x / resolution.y;
|
|
|
|
// vec3 eye = vec3(0,1,-3);
|
|
//S vec3 ray = lookAt(eye, vec3(0), uv);
|
|
//vec3 pos = eye;
|
|
|
|
vec3 ro = vec3(0, 0, -4);
|
|
vec3 rd = normalize(vec3(uv, 1));
|
|
vec3 p;
|
|
// float shade = 0.;
|
|
float t = 0.;
|
|
for (float i = 0.; i < 1.; i += .01) {
|
|
p=ro+rd*t;
|
|
float dist = map(p);
|
|
if (dist < .001) {
|
|
//shade = 1.-i;
|
|
break;
|
|
}
|
|
t += dist;
|
|
}
|
|
|
|
|
|
vec3 n = normal(p);
|
|
lw(p);lw(n);
|
|
vec3 color = boxmap(p, n);//tex(uv);
|
|
//color += g*.01;
|
|
|
|
// color = vec3(n);;
|
|
// color *= shade;
|
|
gl_FragColor = vec4(color, 1);
|
|
}
|