; ------------------------------------------------------------
;
;   PureBasic - BuildMeshLOD
;
;    (c) Fantaisie Software
;
; ------------------------------------------------------------
;

InitEngine3D()
InitSprite():InitKeyboard():InitMouse()

ExamineDesktops():dx=DesktopWidth(0)*0.8:dy=DesktopHeight(0)*0.8
OpenWindow(0, 0,0, DesktopUnscaledX(dx),DesktopUnscaledY(dy), "BuildMeshLOD - [F12] Wireframe/Solid  - [Esc] quit",#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0), 0, 0, dx, dy, 0, 0, 0)

Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Add3DArchive(#PB_Compiler_Home+"Examples/3D/Data/Packs/Sinbad.zip", #PB_3DArchive_Zip)

Parse3DScripts()

CreateCamera(0, 0, 0, 100, 100):MoveCamera(0,30,20,-20):CameraLookAt(0,0,0,40)
CreateLight(0,$ffffff, -10000, 10000, 0)
AmbientColor($111111*3)
CameraBackColor(0,$444488)

; automatic creation of lod
LoadMesh(0, "Sinbad.mesh")
BuildMeshLOD(0,4,40,0.5)

; manual creation of lod
CreateSphere(1,4,32,32)
CreateSphere(2,4,16,16):AddMeshManualLOD(1,2,40)
CreateSphere(3,4,8,8):AddMeshManualLOD(1,3,80)
CreateSphere(4,4,4,4  ):AddMeshManualLOD(1,4,160)
AddMeshManualLOD(1,4,0)

 CreateSphere(5,4,32,32)
CreateSphere(6,4,16,16):AddMeshManualLOD(5,6,40)
CreateSphere(7,4,8,8):AddMeshManualLOD(5,7,80)
CreateSphere(8,4,4,4  ):AddMeshManualLOD(5,8,160)
AddMeshManualLOD(5,8,0)

For i=0 To 20
  CreateEntity(-1,MeshID(0),0,   0,0,i*15)
  CreateEntity(-1,MeshID(1),0, -20,0,i*15)
  CreateEntity(-1,MeshID(5),0,  20,0,i*15)
Next

Define.f a,da,r,MouseX,Mousey,depx,depz,depza,Wireframe=1
Repeat
	While WindowEvent():Wend
	ExamineKeyboard()
	ExamineMouse()
  If KeyboardReleased(#PB_Key_F12):Wireframe=1-Wireframe:EndIf
  If Wireframe:CameraRenderMode(0, #PB_Camera_Wireframe):Else:CameraRenderMode(0, #PB_Camera_Textured):EndIf
	depx=(-Bool(KeyboardPushed(#PB_Key_Left))+Bool(KeyboardPushed(#PB_Key_Right)))*1
	depz=(-Bool(KeyboardPushed(#PB_Key_Down))+Bool(KeyboardPushed(#PB_Key_Up   ))+MouseWheel()*10)*1
	MouseX = -MouseDeltaX() *  0.05
	MouseY = -MouseDeltaY() *  0.05
	RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
	depza+(depz-depza)*0.05:MoveCamera  (0, depX, 0, -depza)
	
	RenderWorld()
	FlipBuffers()    
Until KeyboardReleased(#PB_Key_Escape) Or MouseButton(3)