Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- xa# =10.0
- ya# =-60.0
- Dim rot(8) As Float
- rot(0) = Cos(ya): rot(1) = 0: rot(2) = Sin(ya)
- rot(3) =-Sin(xa)*Sin(ya):rot(4) = Cos(xa):rot(5) = Sin(xa)*Cos(ya)
- rot(6) =-Cos(xa)*Sin(ya):rot(7) =-Sin(xa):rot(8) = Cos(xa)*Cos(ya)
- Global hitobj
- Const ballobj = 1
- Const cubeobj = 3
- Const maxrefl = 8
- Dim refl(2) As Float
- Function f#(x#, y#, z#)
- x = x + 50
- ball# = Sqrt(x*x+y*y+z*z)-50.0
- x = x - 120
- tx# = x*rot(0)+y*rot(1)+z*rot(2)
- ty# = x*rot(3)+y*rot(4)+z*rot(5)
- z = x*rot(6)+y*rot(7)+z*rot(8)
- x = tx
- y = ty
- cube# = Max(Abs(x)-30, max(Abs(y)-30, Abs(z)-30))
- //hitobj = ballobj
- //If cube<ball Then hitobj = cubeobj
- Return Min(ball, cube)
- EndFunction
- Function march(cx#, cy#, cz#, dx#, dy#, dz#, depth)
- dl# = Sqrt(dx*dx+dy*dy+dz*dz)
- dx = dx / dl
- dy = dy / dl
- dz = dz / dl
- g# = 1.0
- iter = 0
- Repeat
- g = f(cx, cy, cz)
- cx = cx + dx * g
- cy = cy + dy * g
- cz = cz + dz * g
- iter = iter + 1
- Until (g<.1 Or g>800)
- nx# = f(cx+.1, cy, cz)-f(cx-.1, cy, cz)
- ny# = f(cx, cy+.1, cz)-f(cx, cy-.1, cz)
- nz# = f(cx, cy, cz+.1)-f(cx, cy, cz-.1)
- nl# = Sqrt(nx*nx+ny*ny+nz*nz)
- nx = nx / nl
- ny = ny / nl
- nz = nz / nl
- dc# = -2*(dx*nx+dy*ny+dz*nz)
- If g<1 Then
- 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)
- lx# = cx+250
- ly# = cy-250
- lz# = cz-100
- ll# = Sqrt(lx*lx+ly*ly+lz*lz)
- lx = lx/ll
- ly = ly/ll
- lz = lz/ll
- c = 255*Min(1.0, .1+Max(0.0, nx*lx+ny*ly+nz*lz))
- refl(0) = refl(0)*.5+c*.5
- refl(1) = refl(1)*.5+c*.5
- refl(2) = refl(2)*.5+c*.5
- EndIf
- EndFunction
- For i# = 0 To 400
- For j# = 0 To 300
- r# = 0
- g# = 0
- b# = 0
- refl(0)=0
- refl(1)=0
- refl(2)=0
- march(0,0,-200,i-200.0,j-150.0,300, 0)
- r = r + refl(0)
- g = g + refl(1)
- b = b + refl(2)
- Color Min(255,r), Min(255,g), Min(255,b)
- Dot i, j
- Next j#
- DrawScreen OFF
- Next i#
- WaitKey
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement