Files
Live-Coding-Sources/2018-04-07/02-koltes.frag
Jonathan Giroux 779fb65edc Add 2018-04-07
2018-04-22 16:20:00 +02:00

90 lines
1.9 KiB
GLSL

/*
{"IMPORTED": {
"guinness": {
"PATH": "./guinness.png",
},
},
"pixelRatio": 1.5,
"audio": true,
"camera": true,
"keyboard": true,
"midi": true,
}
*/
precision mediump float;
uniform float time;
uniform vec2 resolution;
uniform sampler2D camera;
uniform sampler2D key;
uniform sampler2D samples;
uniform sampler2D spetrum;
uniform sampler2D guinness;
mat2 rot(float a)
{
float c = cos(a), s = sin(a);
return mat2(c, s, -s, c);
}
struct D {
float d;
vec3 c;
float m;
};
D map(vec3 p){
p.xy *= rot(time * .3 + p.z * .01);
p.yz *= rot(time * .5);
float rp=4. + sin(time) * 2.;
vec3 idx=floor((p+rp)/rp/2.);
p = mod(p + rp, 2.*rp) - rp;
p.xy *= rot(time * sin(idx.x));
p.yz *= rot(time * sin(idx.y));
D d;
float r = mix(.8,1.,smoothstep(-1.,1.,p.y)-.5);
d.d= length(p.xz) - r;
d.d = max(d.d, abs(p.y)-1.5);
float a=(atan(p.z,p.x)/6.2831+.5)*2.;
vec4 logo = texture2D(guinness, vec2(a, p.y * 1.));
logo.rgb=mix(logo.rgb, 1.-logo.rgb, 1.-length(logo.rgb));
vec3 blk=mix(vec3(.1), logo.rgb, logo.a);
d.c=mix(blk,vec3(1),step(1.2,p.y));
d.m = mix(.01, .05, step(0., length(p.xz) - r - .2));
return d;
}
vec3 pal(float t, vec3 a, vec3 b, vec3 c, vec3 d){
return a+b*cos(6.2831*(c*t+d));
}
void main () {
vec2 uv = gl_FragCoord.xy / resolution.xy;
uv -= .5;
uv.x *= resolution.x / resolution.y;
vec3 ro=vec3(0,0,-8),
rd=normalize(vec3(uv,1.-length(uv*.5))),
mp=ro + rd * 6.;
float ff;
D d;
vec3 c;
for (float f=0.;f<50.;f+=1.){
ff = f;
d=map(mp);
if (abs(d.d)<.001)break;
if (d.d<.5)
c += d.c;
mp+=max(d.d, d.m)*rd;
}
c *= .05;
//c *= 1. - ff/50.;
vec3 green = pal(time*.2 - length(uv), vec3(.2, .8, .3), vec3(.2), vec3(1., 3., 2.), vec3(0.));
//c = mix(green, c, 1.-smoothstep(45., 49., ff));
gl_FragColor = vec4(c,1);
}