#version 410 core uniform float fGlobalTime; // in seconds uniform vec2 v2Resolution; // viewport resolution (in pixels) uniform sampler1D texFFT; // towards 0.0 is bass / lower freq, towards 1.0 is higher / treble freq uniform sampler1D texFFTSmoothed; // this one has longer falloff and less harsh transients uniform sampler1D texFFTIntegrated; // this is continually increasing uniform sampler2D texChecker; uniform sampler2D texNoise; uniform sampler2D texTex1; uniform sampler2D texTex2; uniform sampler2D texTex3; uniform sampler2D texTex4; layout(location = 0) out vec4 out_color; // out_color must be written in order to see anything const float pi=acos(-1); float t = mod(.4*fGlobalTime,10.*pi); float ft=floor(t); float dt=fract(t); float st=ft+dt*dt; #define sat(a) clamp(a,0.,1.) vec2 amod(vec2 p,float m) { float a=mod(atan(p.x,p.y),m)-m*.5; return vec2(cos(a),sin(a))*length(p); } mat2 rot(float a) { float c=cos(a),s=sin(a); return mat2(c,s,-s,c); } float sphere(vec3 p, float r) { return length(p)-r; } float caps(vec3 p, float h, float r) { p.y-=clamp(p.y,0,h); return length(p)-r; } float m=0; float scene(vec3 p) { float nz=texture(texNoise,p.xz).r*.001; float o=100.; vec3 pp=p; pp*=vec3(1,10.,1); o=min(o,sphere(1.02*pp, 1.)*.1+nz*2.); pp-=vec3(0,1.1+.4*sin(t*6),0); o=min(o,sphere(1.12*pp, 1.)*.1+nz*6.); pp-=vec3(0,1.1+.4*sin(t*4),0); o=min(o,sphere(1.1*pp, 1.)*.1+nz*6.); pp-=vec3(0,1.1+.4*sin(t*10),0); o=min(o,sphere(1.2*pp, 1.)*.1+nz*4.); pp-=vec3(0,1.1+.0*sin(t*4),0); o=min(o,sphere(1.2*pp, 1.)*.1+nz*4.); vec3 p2=p; p2.xz=amod(p2.xz,pi*.01); p2.xy*=rot(-pi*.34); p2 -= vec3(.55,0,0); float plate=caps(p2,1.2-.05*sin(p.x*p.y*p.z*10.),.05-.01*sin(p.x*p.z*20.)); if(platemx) break; d+=h; p+=dir*h; } return vec4(p,d); } float shadow(vec3 p, vec3 lp) { vec3 ldir=normalize(lp-p); float ldist=length(lp-p); float d=march(p,ldir,50,.0001,5.).w; if(d