stripping down and down the example TerrainShadow.pb until i get load time about 2 seconds on my old Pentium D cpu , Geforce 210.
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - Terrain : Shadow
;
; (c) 2012 - Fantaisie Software
;
; ------------------------------------------------------------
;
IncludeFile "Screen3DRequester.pb"
#CameraSpeed = 20
#TerrainMiniX = 0
#TerrainMiniY = 0
#TerrainMaxiX = 0
#TerrainMaxiY = 0
Define.f KeyX, KeyY, MouseX, MouseY
Procedure Clamp(*var.float, min.f, max.f)
If *var\f < min
*var\f = min
ElseIf *var\f > max
*var\f = max
EndIf
EndProcedure
; OpenGL needs to have CG enabled to work (Linux and OS X have OpenGL by default)
;
CompilerIf #PB_Compiler_OS <> #PB_OS_Windows Or Subsystem("OpenGL")
Flags = #PB_Engine3D_EnableCG
CompilerEndIf
If InitEngine3D(Flags)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
Add3DArchive("Data/Textures/" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Textures/nvidia" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Scripts" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/GUI" , #PB_3DArchive_FileSystem)
Add3DArchive("Data/Packs/desert.zip", #PB_3DArchive_Zip)
Parse3DScripts()
WorldShadows(#PB_Shadow_Modulative, -1, RGB(105, 105, 105))
;- Light
;
light.l = CreateLight(#PB_Any ,RGB(255, 255, 255), 4000, 1200, 1000,#PB_Light_Directional)
SetLightColor(light, #PB_Light_SpecularColor, RGB(255*0.4, 255*0.4,255*0.4))
LightDirection(light ,0.55, -0.3, -0.75)
AmbientColor(RGB(255*0.2, 255*0.2,255*0.2))
;- Camera
;
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 200, 1500, 700, #PB_Absolute)
RotateCamera(0, -65, 0, 0 ,#PB_Absolute)
CameraBackColor(0, RGB(5, 5, 10))
;----------------------------------
; terrain definition
SetupTerrains(LightID(Light), 3000, #PB_Terrain_NormalMapping)
; initialize terrain
CreateTerrain(0, 129, 1500, 100, 1, "terrain02", "Dat")
; set all texture will be use when terrrain will be constructed
AddTerrainTexture(0, 0, 100, "dirt_grayrocky_diffusespecular.dds", "dirt_grayrocky_normalheight.dds")
; construct terrains
DefineTerrainTile(0, tx, ty, "skull.jpg", ty % 2, tx % 2)
BuildTerrain(0)
;InitBlendMaps
;lines deleted from 83 To 106
; enable shadow terrain
TerrainRenderMode(0, #PB_Terrain_CastShadows)
CreateCube(1, 150)
Global cube =CreateEntity(#PB_Any, MeshID(1), #Null)
MoveEntity(cube, 300,120,0, #PB_Absolute)
EntityRenderMode(cube, #PB_Entity_CastShadow)
; SkyBox
;
SkyBox("desert07.jpg")
ShowGUI(128, 1) ; Display the GUI, semi-transparent and display the mouse cursor
Repeat
Screen3DEvents()
If ExamineKeyboard()
If KeyboardPushed(#PB_Key_Left)
KeyX = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = #CameraSpeed
Else
KeyX = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
KeyY = -#CameraSpeed
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = #CameraSpeed
Else
KeyY = 0
EndIf
EndIf
If ExamineMouse()
MouseX = -MouseDeltaX() * #CameraSpeed * 0.05
MouseY = -MouseDeltaY() * #CameraSpeed * 0.05
;InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left))
;If MouseButton(#PB_MouseButton_Left)
;TerrainMousePick(0, CameraID(0), MouseX(), MouseY())
;MoveEntity(ball, PickX(), PickY()+20, PickZ(), #PB_Absolute)
;EndIf
EndIf
;CameraLocate(0, CameraX(0), PBO_GetTerrainHeight(0, CameraX(0), CameraZ(0)) + 20, CameraZ(0))
MoveCamera (0, KeyX, 0, KeyY)
RotateCamera(0, MouseY, MouseX, 0, #PB_Relative)
y.f+0.6
z.f+0.2
RotateEntity(cube, -90, y, z ,#PB_Absolute)
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)
End
EndIf
Else
MessageRequester("Error","Can't initialize engine3D")
EndIf