diff --git a/src/shaders/fragment.frag b/src/shaders/fragment.frag index 78359b1..8409545 100644 --- a/src/shaders/fragment.frag +++ b/src/shaders/fragment.frag @@ -13,10 +13,31 @@ vec2 getUV() { return gl_FragCoord.xy * scale - 1.0; } +mat2 rot2D(float angle) { + float s = sin(angle); + float c = cos(angle); + return mat2(c, -s, s, c); +} + float noise(in vec2 xy, in float seed) { return fract(tan(distance(xy * PHI, xy) * seed) * xy.x); } +float getScaledFFT(int index, float scale, float offset) { + // Clamp index to valid range + index = clamp(index, 0, 511); + + // Get raw FFT value + float raw = fft_output[index]; + + // Apply logarithmic scaling: log(1 + value * scale) + offset + return log(1.0 + raw * scale) + offset; +} + +///////////////// +// GEOMETRY // +///////////////// + // Hexagonal prism, circumcircle variant float fHexagonCircumcircle(vec3 p, vec2 h) { vec3 q = abs(p); @@ -30,20 +51,27 @@ float sdHex(vec3 pos, float i, float angle) { return d1; } -float getScaledFFT(int index, float scale, float offset) { - // Clamp index to valid range - index = clamp(index, 0, 511); - - // Get raw FFT value - float raw = fft_output[index]; - - // Apply logarithmic scaling: log(1 + value * scale) + offset - return log(1.0 + raw * scale) + offset; +float sdSphere(vec3 p, float r){ + return length(p) -r; } -// Modify your mapScene function +////////////// +// SCENE // +////////////// + +// instructions -> opU( { float to union with } , vec2( {put shape here}, {put material here} ) ) +vec2 opU( vec2 d1, vec2 d2 ) +{ + return (d1.x1e2)" "break;" "if(n.x<.001*r)" @@ -64,88 +73,85 @@ const char *fragment_frag = "}" "if(r>1e2)" "r=0.;" - "return vec3(r,m,y);" + "return vec3(r,l,y);" "}" - "float t(vec3 v,vec3 i,float y)" + "float t(vec3 v,vec3 i,float f)" "{" - "float f=1.,r=.02;" - "for(int c=0;c<6;c++)" + "float r=1.,l=.02;" + "for(int m=0;m<6;m++)" "{" - "if(r>y)" + "if(l>f)" "break;" - "float m=t(v+r*i).x;" - "f=min(f,m/(4.*r));" - "r+=clamp(m,.1,.8);" - "if(f<-1.)" + "float n=t(v+l*i).x;" + "r=min(r,n/(4.*l));" + "l+=clamp(n,.1,.8);" + "if(r<-1.)" "break;" "}" - "f=max(f,-1.);" - "return.25*(1.+f)*(1.+f)*(2.-f);" + "r=max(r,-1.);" + "return.25*(1.+r)*(1.+r)*(2.-r);" "}" - "vec3 e(vec3 v)" + "vec3 x(vec3 v)" "{" "vec2 i=vec2(.01,0);" - "return normalize(vec3(t(v+i.xyy).x-t(v-i.xyy).x,t(v+i.yxy).x-t(v-i.yxy).x,t(v+i.yyx).x-t(v-i.yyx).x));" + "v=vec3(t(v+i.xyy).x-t(v-i.xyy).x,t(v+i.yxy).x-t(v-i.yxy).x,t(v+i.yyx).x-t(v-i.yyx).x);" + "return normalize(v);" "}" - "vec3 e(vec3 v,vec3 i,vec3 f,vec3 r,vec3 c,float m)" + "vec3 t(vec3 v,vec3 i,vec3 f,vec3 r,vec3 l,float y)" "{" "v-=f;" - "float y=length(v);" + "float m=length(v);" "v=normalize(v);" - "float n=3./(1.+.09*y+.032*y*y),p=max(dot(c,v),0.);" + "float n=3./(1.+.09*m+.032*m*m),c=max(dot(l,v),0.);" "r=normalize(v-r);" "vec3 e=vec3(.04);" "e+=(1.-e)*pow(clamp(1.-max(dot(r,v),0.),0.,1.),5.);" - "y=t(f+c*.01,v,y);" - "return(i*p*n+i*pow(max(dot(c,r),0.),mix(128.,8.,m))*n*e)*y;" + "m=t(f+l*.01,v,m);" + "return(i*c*n+i*pow(max(dot(l,r),0.),mix(128.,8.,y))*n*e)*m;" "}" - "vec3 e(vec3 v,vec3 f,vec3 i,float y)" + "vec3 t(vec3 v,vec3 i,vec3 f,float r)" "{" "float m=.01;" - "vec3 c=vec3(0);" - "if(y==0.)" - "c=vec3(.8314,.2941,.2941),m=.1;" - "else if(y==1.)" - "c=vec3(.6196,.6118,.6118),m=.7;" - "else if(y==2.)" - "c=vec3(.3255,.4784,.3255),m=.2;" - "else if(y==3.)" - "c=vec3(.2471,.3059,.6314),m=1.;" - "else if(y==4.)" - "c=vec3(.9961,1,.9922),m=.1;" - "else if(y==5.)" - "c=vec3(.9961,1,.9922),m=.3;" - "v=vec3(0)+e(vec3(-10,10,0),vec3(.77,.26,.73),v,i,f,m)+e(vec3(0,10,-5),vec3(.08,.62,.75),v,i,f,m)+e(vec3(0,25,0),vec3(.5137,.1961,.7725),v,i,f,m)+vec3(.08,.62,.75)*clamp(dot(f,normalize(vec3(0,1,-3)*vec3(0,-1,-2))),0.,1.)*.8;" - "return c*max(vec3(0),v);" + "vec3 l=vec3(0);" + "if(r==0.)" + "l=vec3(.8314,.2941,.2941),m=.1;" + "else if(r==1.)" + "l=vec3(.6196,.6118,.6118),m=.7;" + "else if(r==2.)" + "l=vec3(.3255,.4784,.3255),m=.2;" + "else if(r==3.)" + "l=vec3(.2471,.3059,.6314),m=1.;" + "else if(r==4.)" + "l=vec3(.9961,1,.9922),m=.1;" + "else if(r==5.)" + "l=vec3(.9961,1,.9922),m=.3;" + "vec3 y=vec3(0);" + "y+=t(vec3(0,40,-10),vec3(.77,.26,.73),v,f,i,m);" + "y+=t(vec3(0,2,-5),vec3(.08,.62,.75),v,f,i,m);" + "y+=t(vec3(0,20,15),vec3(.77,.26,.73),v,f,i,m);" + "y+=vec3(.08,.62,.75)*clamp(dot(i,normalize(vec3(0,1,-3)*vec3(0,-1,-2))),0.,1.)*.8;" + "return l*max(vec3(0),y);" "}" - "vec3 e(vec2 v,vec3 f)" + "vec3 t(vec2 i,vec3 v)" "{" - "f=normalize(vec3(0,-1,10)-f);" - "vec3 m=normalize(cross(vec3(0,1,0),f));" - "return normalize(v.x*m+v.y*normalize(cross(f,m))+f);" + "v=normalize(vec3(0,-1,10)-v);" + "vec3 m=normalize(cross(vec3(0,1,0),v));" + "return normalize(v+i.x*m+i.y*cross(v,m));" "}" - "vec3 e()" + "vec3 t(vec2 v)" "{" - "vec3 f;" - "{" - "float v=c*.06;" - "f=vec3(sin(v)*15.,30.+cos(v*.5)*5.,cos(v)*15.);" - "}" - "return f;" - "}" - "vec3 e(vec2 v)" - "{" - "vec3 f=e(v,e()),m=vec3(.102,.2431,.3412),y=vec3(0),i=t(e(),f,y);" + "vec3 i=vec3(0,20,-10),m=t(v,i),f=vec3(0),r=vec3(0);" + "i=t(i,m,r);" "if(i.x>0.)" "{" - "vec3 v=e(y);" - "m=e(y,v,f,i.y);" + "vec3 v=x(r);" + "f=t(r,v,m,i.y);" "}" - "return m;" + "return f;" "}" "void main()" "{" - "vec3 v=e(gl_FragCoord.xy*vec2(.00104166667,.00185185185)-1.);" + "vec3 v=t(gl_FragCoord.xy*vec2(.00104166667,.00185185185)-1.);" "f=vec4(v,1);" "}";