• NFT
  • Explore
  • Challenge
Sign in Sign up
Create Art arrow_drop_down
settings
Templates Resources
help CANCEL
Save
xxxxxxxxxx
36
 
1
precision highp float;
2
uniform vec2 resolution;
3
uniform float time;
4
#define rot(a) mat2(cos(a),sin(a),-sin(a),cos(a))
5
#define TAU atan(1.)*8.
6
#define changeSpeed 1.0
7
#define PI 3.1416
8
float cube(vec3 p,float r){vec3 q=abs(p)-r;return length(max(q,0.))+min(max(q.x,max(q.y,q.z)),0.);}
9
float octa(vec3 p,float r){return dot(abs(p),normalize(vec3(r)))-r;}
10
float map(vec3 p)
11
{
12
    p.xy*=rot(3.*PI/4.+time*.25);
13
    p.yz*=rot(PI/2.-time*.25);
14
    p.xz*=rot(PI/4.);
15
    float obj1 = cube(p, 5.15);
16
    float obj2 = octa(p, 4.);
17
    return  mix(obj1, obj2, (cos(time*changeSpeed)+1.)/2.);
18
}
19
void main(){
20
    vec4 display = vec4(0.0);
21
    vec2 uv=(gl_FragCoord.xy-.5*resolution)/resolution.y;
22
    vec3 rd=normalize(vec3(uv,1));
23
    vec3 p=vec3(0,0,-20);
24
    float d=1.,ix;
25
    for(int i=0;i<99;i++){
26
      p+=rd*(d=map(p));
27
      ix++;
28
      if (d<.001){break;}
29
    }
30
    if(d<.001) {
31
      display += 2./ix;
32
      display += mix(vec4(0.1,0.6,0.9,0),vec4(0.12,0.11,0.13,0),(cos(time*changeSpeed)+1.)/2.)*16./ix;
33
    }
34
    display.w=1.;
35
    gl_FragColor = display;
36
}
autorenew