Don't like ads? PRO users don't see any ads ;-)
Guest

smoke vs structure - shadertoy version! (Fell^RiFT)

By: a guest on Jul 2nd, 2012  |  syntax: OpenGL Shading  |  size: 0.94 KB  |  hits: 135  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. precision lowp float;
  2. #define f float
  3. #define n normalize
  4. #define v vec3
  5.  
  6. uniform vec2 resolution;
  7. uniform f time;
  8. f t=time/10.;
  9.  
  10. f b(v p,v b){
  11.                 v q=abs(p)-b;
  12.                 return min(max(q.x,max(q.y,q.z)),length(max(q,0.)));
  13. }
  14.  
  15. f h(v p){
  16.                 v q=v(2.5),a,r,k=v(1e2,1,0);
  17.                 p=mod(p,q)-q/2.;
  18.                 f d=b(p,v(1)),s=1.;
  19.                 for(int i=0;i<3;i++){
  20.                                 a=mod(p*s,2.)-1.;
  21.                                 s*=(2.+t)/3.;
  22.                                 r=1.5-3.0*abs(a);
  23.                                 d=max(d,-min(b(r,k.xyy),min(b(r.yzx,k.yxy),b(r.zxy,k.yyx)))/s);
  24.                 }
  25.                 return d;
  26. }
  27.  
  28. void main(){
  29.                 vec2 q=-1.+2.*gl_FragCoord.xy/resolution;
  30.                 q.x*=resolution.x/resolution.y;
  31.                 f d=0.;
  32.                 v p=v(.1*sin(t),.5,6.*t),
  33.                 w=n(-p),u=n(cross(v(cos(6.*t),sin(6.*t),0),w)),
  34.                 r=n(q.x*u+q.y*n(cross(w,u))+w);
  35.                 for(int i=0;i<64;i++){
  36.                                 d=h(p)-.001;
  37.                                 if(d<.001)break;
  38.                                 p+=r*d/4.;
  39.                 }
  40.            
  41.                 d=0.;
  42.                 for(f i=0.;i<9.;i++)
  43.                                 d+=h(p+v(cos(i),sin(i),-cos(i))/4.);
  44.            
  45.                 t<1.?d*=t:d;
  46.                 gl_FragColor=vec4(h(p+.1)*v(1,.4,.2)*d*d,1);
  47. }