; ------------------------------------------------------------ ; ; PureBasic - Static Geometry ; ; (c) Fantaisie Software ; ; ------------------------------------------------------------ ; Define.f KeyX, KeyY, MouseX, MouseY Define nx.f, nz.f, Boost.f = 10, Yaw.f, Pitch.f InitEngine3D() InitSprite() InitKeyboard() InitMouse() ExamineDesktops():dx=DesktopWidth(0)*0.8:dy=DesktopHeight(0)*0.8 OpenWindow(0, 0,0, DesktopUnscaledX(dx),DesktopUnscaledY(dy), " Static Geometry - [Esc] quit",#PB_Window_ScreenCentered) OpenWindowedScreen(WindowID(0), 0, 0, dx, dy, 0, 0, 0) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Main", #PB_3DArchive_FileSystem) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem) Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Scripts",#PB_3DArchive_FileSystem) Parse3DScripts() WorldShadows(#PB_Shadow_Additive) AmbientColor(0) ; node for Light and Billboard (Sun) CreateNode(0, 0, 3000, 0) ;Create light CreateLight(0, RGB(90, 105, 132), 0, 3000, 0) AttachNodeObject(0, LightID(0)) ; Create flare GetScriptMaterial(0, "Scene/burst") CreateBillboardGroup(0, MaterialID(0), 2048, 2048) AddBillboard(0, 0, 3000, 0) AttachNodeObject(0, BillboardGroupID(0)) ; Static geometry ; ; Create Entity CreateCube(0, 1) CreateEntity(0, MeshID(0), #PB_Material_None) ; Create Static geometry CreateStaticGeometry(0, 1000, 1000, 1000, #True) For z = -10 To 10 For x = -10 To 10 AddStaticGeometryEntity(0, EntityID(0), x * 1000, 0, z * 1000, 1000, 10, 1000, 0, 0, 0) Height.f = 200 + Random(800) AddStaticGeometryEntity(0, EntityID(0), x * 1000, Height/2, z * 1000, 200, Height, 200, 0, Random(360), 0) Next Next ; Build the static geometry BuildStaticGeometry(0) FreeEntity(0) ; Camera ; CreateCamera(0, 0, 0, 100, 100) MoveCamera(0, 2000, 2000, 2000, #PB_Absolute) CameraLookAt(0, 0, 0, 0) CameraFOV (0, 90) CameraBackColor(0, RGB(90, 105, 132)) Repeat While WindowEvent():Wend If ExamineMouse() Yaw = -MouseDeltaX() * 0.05 Pitch = -MouseDeltaY() * 0.05 EndIf If ExamineKeyboard() If KeyboardPushed(#PB_Key_Up) MoveCamera(0, 0, 0, -2 * Boost) ElseIf KeyboardPushed(#PB_Key_Down) MoveCamera(0, 0, 0, 2 * Boost) EndIf If KeyboardPushed(#PB_Key_Left) MoveCamera(0, -2 * Boost, 0, 0) ElseIf KeyboardPushed(#PB_Key_Right) MoveCamera(0, 2 * Boost, 0, 0) EndIf EndIf ; Sun nx = 10000 * Cos(ElapsedMilliseconds() / 2500) nz = 10000 * Sin(ElapsedMilliseconds() / 2500) MoveNode(0, nx, 3000, nz, #PB_Absolute) RotateCamera(0, Pitch, Yaw, 0, #PB_Relative) RenderWorld() FlipBuffers() Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1