Advertisement
Guest User

Untitled

a guest
Mar 11th, 2015
308
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.50 KB | None | 0 0
  1.  
  2. constant byte_width =640,byte_height=480, byte_depth=64
  3.  
  4. sequence byte_array
  5. byte_array={}
  6. --x,y,z
  7.  
  8. function distance3d(integer x1, integer y1, integer z1, integer x2, integer y2, integer z2)
  9.  integer x3,y3,z3
  10.  x3 = power(x1 - x2, 2)
  11.  y3 = power(y1 - y2, 2)
  12.  z3 = power(z1 - z2, 2)
  13.  
  14.  return sqrt(x3 + y3 + z3 )
  15. end function
  16.  
  17.  
  18. for i=1 to byte_depth do
  19.   byte_array=append(byte_array, repeat(repeat(0,byte_width),byte_height) )
  20. end for
  21.  
  22. for z=1 to byte_depth do
  23. --byte_array=append(byte_array,{})
  24. for y=1 to byte_height do
  25.   for x=1 to byte_width do
  26.  
  27.   end for
  28. end for
  29. end for
  30.  
  31.  
  32. procedure sphere(integer center_x, integer center_y, integer center_z, integer dist, atom colour)
  33. atom dd
  34.  
  35.   for x=1 to byte_width do
  36.     for y=1 to byte_height do
  37.       for z=1 to byte_depth do
  38.         dd=distance3d(x,y,z ,center_x,center_y,center_z)
  39.         if dd<dist then
  40.           byte_array[z][x][y]=colour
  41.         end if
  42.       end for
  43.     end for
  44.   end for
  45. end procedure
  46.  
  47. procedure cube(integer start_x, integer start_y, integer start_z, integer size, atom colour)
  48.  
  49.   for x=start_x to start_x+size do
  50.     for y=start_y to start_y+size do
  51.       for z=start_z to start_z+size do
  52.           byte_array[z][x][y]=colour
  53.       end for
  54.     end for
  55.   end for
  56. end procedure
  57.  
  58.  sphere(320,240,24, 24, rgb(255,0,0))
  59.  
  60. sphere(320,340,32, 32, rgb(255,255,0))
  61.  
  62. sphere(120,140,16, 16, rgb(255,0,255))
  63.  
  64. sphere(32,32,32, 32, rgb(0,255,0))
  65.  
  66. sphere(280,180,32, 32, rgb(0,0,255))
  67.  
  68. cube(320,240,1, 32 , rgb(0,0,255) )
  69.  
  70.  
  71. function rgbs(atom rgb)
  72.     return ( {and_bits(#000000FF, rgb),
  73.               and_bits(#0000FF00, rgb) / #100,
  74.               and_bits(#00FF0000, rgb) / #10000 } )
  75. end function
  76.  
  77. sequence screen_pixels
  78. screen_pixels=repeat(repeat({0,0,0},byte_width),byte_height)
  79.  
  80. integer light_x,light_y,light_z
  81. integer light2_x,light2_y,light2_z
  82. light_x=320
  83. light_y=240
  84. light_z=-32
  85.  
  86. light2_y=320
  87. light2_x=300
  88.  
  89. light2_z=-32
  90.  
  91. integer surface_x,surface_y,surface_z
  92. atom length1
  93. surface_x=0
  94. surface_y=0
  95. surface_z=-1
  96.  
  97. length1=sqrt(0 + 0 + surface_z*surface_z )
  98. surface_x=surface_x/length1
  99. surface_y=surface_y/length1
  100. surface_z=surface_z/length1
  101.  
  102. sequence dib,temp
  103. dib = newDib(byte_width, byte_height)
  104.  
  105. atom lightness,lightness2,vx,vy,vz,ttt
  106. ttt=time()
  107.  
  108. sequence active_pixels
  109. active_pixels={}
  110.  
  111.   for x=1 to byte_width-1 do
  112.     for y=1 to byte_height-1 do
  113.        for z=1 to byte_depth do
  114.    
  115.          if byte_array[z][y][x]!=0 then
  116.            active_pixels=append(active_pixels,{x,y,z})
  117.            vx= light_x-x
  118.            vy= light_y-y
  119.            vz= light_z-z
  120.  
  121.            length1=sqrt(vx*vx + vy*vy + vz*vz )
  122.  
  123.            if length1!=0 then
  124.              vx= vx/length1
  125.              vy= vy/length1
  126.              vz= vz/length1
  127.              lightness=(vx*surface_x) + (vy*surface_y) + (vz*surface_z)
  128.            end if
  129.  
  130.  
  131.  
  132.            --screen_pixels[x][y]={255 * ((1/byte_depth)* (byte_depth-z)) ,0,0}
  133.            --screen_pixels[x][y]={255 *lightness ,0,0}
  134.            temp=rgbs(byte_array[z][y][x])
  135.    
  136.        
  137.        
  138.        
  139.            temp*=lightness
  140.        
  141.            screen_pixels[x][y]=temp--rgbs(byte_array[z][y][x]*lightness)
  142.  
  143.            fastPutDibPixel( dib, y,  x,  screen_pixels[x][y] )
  144.  
  145.            exit
  146.          end if
  147.        end for
  148.     end for
  149.   end for
  150.  
  151.  
  152. procedure render_update()
  153. integer x,y,z
  154.     for i=1 to length(active_pixels) do
  155.       x=active_pixels[i][1]
  156.       y=active_pixels[i][2]
  157.       z=active_pixels[i][3]
  158.    
  159.            vx= light_x-x
  160.            vy= light_y-y
  161.            vz= light_z+z
  162.  
  163.            lightness=0
  164.            lightness2=0
  165.  
  166.            length1=sqrt(vx*vx + vy*vy + vz*vz )
  167.  
  168.            if length1!=0 then
  169.              vx= vx/length1
  170.              vy= vy/length1
  171.              vz= vz/length1
  172.              lightness=(vx*surface_x) + (vy*surface_y) + (vz*surface_z)
  173.            end if
  174.  
  175.            vx= light2_x-x
  176.            vy= light2_y-y
  177.            vz= light2_z-z
  178.  
  179.            length1=sqrt(vx*vx + vy*vy + vz*vz )
  180.  
  181.            if length1!=0 then
  182.              vx= vx/length1
  183.              vy= vy/length1
  184.              vz= vz/length1
  185.              lightness2=(vx*surface_x) + (vy*surface_y) + (vz*surface_z)
  186.            end if
  187.  
  188.            --screen_pixels[x][y]={255 * ((1/byte_depth)* (byte_depth-z)) ,0,0}
  189.            --screen_pixels[x][y]={255 *lightness ,0,0}
  190.            temp=rgbs(byte_array[z][y][x])
  191.        
  192.            ttt=lightness+lightness2
  193.            if ttt>1 then
  194.             ttt=1
  195.            end if
  196.            temp*=ttt
  197.        
  198.            screen_pixels[x][y]=temp--rgbs(byte_array[z][y][x]*lightness)
  199.  
  200.            fastPutDibPixel( dib, y,  x,  screen_pixels[x][y] )
  201.  
  202.    
  203.     end for
  204.    
  205.  
  206. end procedure
  207.  
  208. setTimer(Window1,1000,100)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement