Guest User

tomohiro_test_frac

a guest
Jun 1st, 2011
316
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <canvas id="canvas" width="512" height="512"></canvas>
  2. <script type="text/javascript">
  3.     function init() {
  4.         function frac(x, y, z) {
  5.             function fraccore(x)
  6.             {
  7.                 ox = x;
  8.                 var scale = 1;
  9.                 for(i=0; i<6; i++)
  10.                 {
  11.                     x*=3;
  12.                     scale*=3;
  13.                     flx = Math.floor(x);
  14.                     x -= flx;
  15.                     if(!( flx==0 || flx==2 ))
  16.                     {
  17.                         if(x<1.5)
  18.                         {
  19.                             ox -= 1/scale;
  20.                         }else
  21.                         {
  22.                             ox += 1/scale;
  23.                         }
  24.                     }
  25.                 }
  26.  
  27.                 return ox;
  28.             }
  29.  
  30.             x = fraccore(x)-0.5;
  31.             y = fraccore(y)-0.5;
  32.             z = fraccore(z)-0.5;
  33.             return [x*4*x*x, y*4*y*y, z*4*z*z+1.5, (z*4*z*z+0.5)*255];
  34.         }
  35.         var canvas=document.getElementById("canvas"),
  36.             context=canvas.getContext("2d"),
  37.             imageData=context.getImageData(0, 0, 512, 512),
  38.             buffer=imageData.data,
  39.             zbuffer=[512*512],
  40.             interval,
  41.             steps=0,
  42.             render=function () {
  43.                 var point, i, x, y, z, xp, yp, pos;
  44.  
  45.                 for (i=0; i<50000; i++) {
  46.                     x=Math.random();
  47.                     y=Math.random();
  48.                     z=Math.random();
  49.                     point = frac(x, y, z);
  50.                     xp=
  51.                         Math.floor(
  52.                             ((point[0])*512)/point[2])+
  53.                         256;
  54.                     yp=
  55.                         Math.floor(
  56.                             ((point[1])*512)/point[2])+
  57.                         256;
  58.                     if (
  59.                             (xp>=0)&&
  60.                             (xp<512)&&
  61.                             (yp>=0)&&
  62.                             (yp<512)&&
  63.                             (point[2]<zbuffer[pos=yp*512+xp]))
  64.                     {
  65.                         zbuffer[pos]=point[2];
  66.                         buffer[pos*4+1]=point[3];
  67.                         buffer[pos*4+3]=255;
  68.                     }
  69.                 }
  70.                 context.putImageData(imageData, 0, 0);
  71.                 steps++;
  72.                 if (steps>1024) {
  73.                     window.clearInterval(interval);
  74.                 }
  75.             };
  76.  
  77.         for (i=0; i<512*512; i++) {
  78.             zbuffer[i]=10000000000;
  79.         }
  80.         interval=window.setInterval(render, 0);
  81.     }
  82.     init();
  83. </script>
RAW Paste Data