Advertisement
Guest User

Untitled

a guest
Jun 15th, 2017
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. xa# =10.0
  3. ya# =-60.0
  4.  
  5. Dim rot(8) As Float
  6. rot(0) = Cos(ya):        rot(1) = 0:      rot(2) = Sin(ya)
  7. rot(3) =-Sin(xa)*Sin(ya):rot(4) = Cos(xa):rot(5) = Sin(xa)*Cos(ya)
  8. rot(6) =-Cos(xa)*Sin(ya):rot(7) =-Sin(xa):rot(8) = Cos(xa)*Cos(ya)
  9.  
  10. Global hitobj
  11. Const ballobj = 1
  12. Const cubeobj = 3
  13.  
  14. Const maxrefl = 8
  15. Dim refl(2) As Float
  16.  
  17. Function f#(x#, y#, z#)
  18.     x = x + 50
  19.     ball# = Sqrt(x*x+y*y+z*z)-50.0
  20.     x = x - 120
  21.     tx# = x*rot(0)+y*rot(1)+z*rot(2)
  22.     ty# = x*rot(3)+y*rot(4)+z*rot(5)
  23.     z =   x*rot(6)+y*rot(7)+z*rot(8)
  24.     x = tx
  25.     y = ty
  26.     cube# = Max(Abs(x)-30, max(Abs(y)-30, Abs(z)-30))
  27.     //hitobj = ballobj
  28.     //If cube<ball Then hitobj = cubeobj
  29.     Return Min(ball, cube)
  30. EndFunction
  31.  
  32. Function march(cx#, cy#, cz#, dx#, dy#, dz#, depth)
  33.     dl# = Sqrt(dx*dx+dy*dy+dz*dz)
  34.     dx = dx / dl
  35.     dy = dy / dl
  36.     dz = dz / dl
  37.     g# = 1.0
  38.     iter = 0
  39.     Repeat
  40.         g = f(cx, cy, cz)
  41.         cx = cx + dx * g
  42.         cy = cy + dy * g
  43.         cz = cz + dz * g
  44.         iter = iter + 1
  45.     Until (g<.1 Or g>800)
  46.     nx# = f(cx+.1, cy, cz)-f(cx-.1, cy, cz)
  47.     ny# = f(cx, cy+.1, cz)-f(cx, cy-.1, cz)
  48.     nz# = f(cx, cy, cz+.1)-f(cx, cy, cz-.1)
  49.     nl# = Sqrt(nx*nx+ny*ny+nz*nz)
  50.     nx = nx / nl
  51.     ny = ny / nl
  52.     nz = nz / nl
  53.     dc# = -2*(dx*nx+dy*ny+dz*nz)
  54.    
  55.     If g<1 Then
  56.         If depth<maxrefl Then march(5*(dx+dc*nx)+cx, 5*(dy+dc*ny)+cy, 5*(dz+dc*nz)+cz, dx+dc*nx, dy+dc*ny, dz+dc*nz, depth+1)
  57.         lx# = cx+250
  58.         ly# = cy-250
  59.         lz# = cz-100
  60.         ll# = Sqrt(lx*lx+ly*ly+lz*lz)
  61.         lx = lx/ll
  62.         ly = ly/ll
  63.         lz = lz/ll
  64.         c = 255*Min(1.0, .1+Max(0.0, nx*lx+ny*ly+nz*lz))
  65.         refl(0) = refl(0)*.5+c*.5
  66.         refl(1) = refl(1)*.5+c*.5
  67.         refl(2) = refl(2)*.5+c*.5
  68.     EndIf
  69. EndFunction
  70.  
  71. For i# = 0 To 400
  72.     For j# = 0 To 300
  73.        
  74.         r# = 0
  75.         g# = 0
  76.         b# = 0
  77.         refl(0)=0
  78.         refl(1)=0
  79.         refl(2)=0
  80.         march(0,0,-200,i-200.0,j-150.0,300, 0)
  81.         r = r + refl(0)
  82.         g = g + refl(1)
  83.         b = b + refl(2)
  84.         Color Min(255,r), Min(255,g), Min(255,b)
  85.         Dot i, j
  86.     Next j#
  87.     DrawScreen OFF
  88. Next i#
  89.  
  90. WaitKey
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement