onilink_

mandelbulb

Jun 14th, 2015
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. float mandelbulbDistance(Vec3 p)
  2. {
  3.     Vec3 v = p;
  4.     Vec3 c = v;
  5.  
  6.     float r = 0.f;
  7.     float d = 1.f;
  8.    
  9.     for(int n=0; n<=10; ++n)
  10.     {
  11.         r = v.length();
  12.         if(r > 8.f) // Bailout
  13.         {
  14.             break;
  15.         }
  16.  
  17.         float theta = acosf(v.z/r);
  18.         float phi = atan2f(v.y, v.x);
  19.        
  20.         float rr = r * r;
  21.         float rrrr = rr * rr;
  22.         d = rrrr * rrrr * r * 10 * d + 1.f;
  23.         float zr = rrrr * rrrr * rr;
  24.        
  25.  
  26.         theta *= 10;
  27.         phi *= 10;
  28.         float sinTheta = sinf(theta);
  29.        
  30.         v = (Vec3(sinTheta*cosf(phi), sinf(phi)*sinTheta, cosf(theta))*zr) + c;
  31.     }
  32.     return (0.5f * r * logf(r)) / d;
  33. }
Advertisement
Add Comment
Please, Sign In to add comment