Include "xors3d.bb"
Global pivot,camera,mxs#,mys#,light,test
xGraphics3D(640,480, 32,0, 0)
CreateWorld()
Function CreateWorld()
pivot=xCreatePivot()
camera = xCreateCamera(pivot)
xPositionEntity camera,0,0,-10
light=xCreateLight()
xPositionEntity light,200,200,200
ball=xCreateSphere()
xEntityPickMode ball,2,1,0
For i=0 To 20
ball2=xCopyEntity(ball)
xPositionEntity ball2,Rnd(-10,10),Rnd(-10,10),Rnd(-10,10)
xScaleEntity ball2,Rnd(0.4,2),Rnd(0.4,2),Rnd(0.4,2)
xEntityColor ball2,Rand(0,255),Rand(0,255),Rand(0,255)
xEntityPickMode ball2,2,1,0
Next
base=xCreateCube()
xEntityPickMode base,2,1,0
xScaleEntity base,10,0.1,10
xPositionEntity base,0,-10,0
test=xCreateCube()
xScaleEntity test,0.1,0.1,0.1
xEntityColor test,255,0,0
End Function
While(Not (xKeyHit(KEY_ESCAPE) Or xWinMessage("WM_CLOSE")))
If xMouseDown(1) Then xCameraPick camera,xMouseX(),xMouseY()
xPositionEntity test,xPickedX (),xPickedY (),xPickedZ ()
pitch#=xVectorPitch(xPickedNX (),xPickedNY (),xPickedNZ ())
yaw#=xVectorYaw(xPickedNX (),xPickedNY (),xPickedNZ ())
xRotateEntity test,pitch,yaw,0
xRenderWorld()
Control(0.2,1)
If xPickedEntity()>0 Then
mesh=xPickedEntity()
Ecolor#=xEntityRed(mesh)*255^2+xEntityGreen(mesh)* 255+xEntityBlue(mesh)
ARGB$="FF"+Right$(Hex$(ecolor),6)
xText 100,200,ARGB
EndIf
If xKeyDown(57) SimpleRaytracer()
xFlip()
Wend
End
Function SimpleRaytracer()
For y=0 To 300;xGraphicsHeight()-1
For x=0 To 300;xGraphicsWidth()-1
xCameraPick camera,x,y
If xPickedEntity()>0 Then
mesh=xPickedEntity()
xColor xEntityRed(mesh),xEntityGreen(mesh),xEntityBlue(me sh)
xLine x,y,x,y
Else
xColor 0,0,0
xLine x,y,x,y
;mesh=xPickedEntity()
;Ecolor#=xEntityRed(mesh)*255^2+xEntityGreen(mesh) *255+xEntityBlue(mesh)
;ARGB$="FF"+Right$(Hex$(ecolor),6)
;xWritePixel x,y,ARGB$
;Else
;xWritePixel x,y,"FFFF0000"
EndIf
Next
Next
xFlip
While(Not (xKeyHit(KEY_ESCAPE) Or xWinMessage("WM_CLOSE")))
Wend
End Function
Function control(speed#,mousesensitivity#)
If xKeyDown(key_1) Then xWireframe(True) Else xWireframe(False)
xText(10, 10, "FPS: " + xGetFPS())
xText(10,30,"Trisinview: "+xTrisRendered ())
mxs#=mxs#+(xMouseXSpeed()/5.0)
mys#=mys#+(xMouseYSpeed()/5.0)
xRotateEntity (camera,mousesensitivity#*mys#,-mousesensitivity#*mxs#,0)
xMoveMouse xGraphicsWidth()/2,xGraphicsHeight()/2
If xKeyDown(17) Or xKeyDown(200) xMoveEntity camera,0,0,speed#
If xKeyDown(31) Or xKeyDown(20

xMoveEntity camera,0,0,-speed#
If xKeyDown(30) Or xKeyDown(203) xMoveEntity camera,-speed#,0,0
If xKeyDown(32) Or xKeyDown(205) xMoveEntity camera,speed#,0,0
xPositionEntity pivot,xEntityX#(camera,1),xEntityY#(camera,1),xEnt ityZ#(camera,1)
xPositionEntity camera,0,0,0
End Function