Code: Select all
;Example - please check line 157
If InitEngine3D(#PB_Engine3D_AverageFPS) = 0 Or InitSprite() = 0 Or InitKeyboard() = 0
End
EndIf
#SpritePos = 0
#SpriteStat = 1
#Relspeed = 0.93 ;Entity scroll speed
Structure _object
id.i
ma.i
ms.i
tx.i
EndStructure
Structure _Movement
zoom.f
rx.f
rz.f
relX.f
relZ.f
EndStructure
Global mo._Movement
Declare.i Status()
Declare.i DrawScene()
Declare.i DrawObjects()
Global cam.i, ret.i, pl._object, lg.i, Quit.i = #False
Global NewList o._object()
mo\zoom = 200
ExamineDesktops()
OpenWindow(0, 0, 0, DesktopWidth(0), DesktopHeight(0), "Simple 'Isometric' illusion using Ogre3D", #PB_Window_BorderLess)
OpenWindowedScreen(WindowID(0), 0, 0, DesktopWidth(0), DesktopHeight(0))
Add3DArchive(".", #PB_3DArchive_FileSystem)
WorldShadows(#PB_Shadow_Additive)
lg = CreateLight(#PB_Any, $FF0000, -100, 200, -200)
cam = CreateCamera(#PB_Any, 0, 0, 100, 100)
MoveCamera(cam, 0, mo\zoom, 0)
RotateCamera(cam, -50, 45, 0)
ret = DrawScene()
ret = DrawObjects()
Repeat
Repeat
ev = WindowEvent()
Until ev = 0
ExamineKeyboard()
If KeyboardPushed(#PB_Key_Escape)
Quit = #True
EndIf
If KeyboardPushed(#PB_Key_Left)
mo\relX + 0.001
mo\rx = #Relspeed
ElseIf KeyboardPushed(#PB_Key_Right)
mo\relX - 0.001
mo\rx = -#Relspeed
Else
mo\rx = 0
EndIf
If KeyboardPushed(#PB_Key_Up)
mo\RelZ + 0.001
mo\rz = #Relspeed
ElseIf KeyboardPushed(#PB_Key_Down)
mo\RelZ - 0.001
mo\rz = -#Relspeed
Else
mo\rz = 0
EndIf
If KeyboardPushed(#PB_Key_Add)
If mo\zoom - 0.4 > 100
mo\zoom - 0.4
Else
mo\zoom = 100
EndIf
ElseIf KeyboardPushed(#PB_Key_Subtract)
If mo\zoom + 0.4 < 200
mo\zoom + 0.4
Else
mo\zoom = 200
EndIf
EndIf
MoveCamera(cam, 0, mo\zoom, 0, #PB_Absolute)
ScrollMaterial(pl\ma, mo\relX, mo\RelZ, #PB_Material_Fixed)
ForEach o()
If EntityX(o()\id) > 500
MoveEntity(o()\id, -500, EntityY(o()\id), EntityZ(o()\id), #PB_Absolute)
ElseIf EntityX(o()\id) < -500
MoveEntity(o()\id, 500, EntityY(o()\id), EntityZ(o()\id), #PB_Absolute)
EndIf
If EntityZ(o()\id) > 500
MoveEntity(o()\id, EntityX(o()\id), EntityY(o()\id), -500, #PB_Absolute)
ElseIf EntityZ(o()\id) < -500
MoveEntity(o()\id, EntityX(o()\id), EntityY(o()\id), 500, #PB_Absolute)
EndIf
MoveEntity(o()\id, mo\rx, 0, mo\rz, #PB_Relative)
Next
RenderWorld()
ret = Status()
DisplayTransparentSprite(#SpritePos, 0, 0)
DisplayTransparentSprite(#SpriteStat, 0, ScreenHeight()-30)
FlipBuffers()
Until Quit = #True
Procedure.i DrawObjects()
Protected sc.i, c.i, x.f = -500, z.f = -500
;just place some cubes at some location using different sizes
While x < 500
While z < 500
AddElement(o())
sc = Random(60, 30)
o()\ms = CreateCube(#PB_Any, 0.5)
o()\id = CreateEntity(#PB_Any, MeshID(o()\ms), #PB_Material_None)
ScaleEntity(o()\id, Random(100, 30), sc, Random(100, 30))
MoveEntity(o()\id, x, sc/2, z, #PB_Absolute)
z + 100
Wend
x + 100
z = -500
Wend
ProcedureReturn #True
EndProcedure
Procedure.i DrawScene()
Protected x.i, y.i
pl\ms = CreatePlane(#PB_Any, 20, 20, 1, 1, 1, 1)
CompilerIf #PB_Compiler_Version >= 550
pl\tx = CreateTexture(#PB_Any, 512, 512, "Boxey")
CompilerElse
pl\tx = CreateTexture(#PB_Any, 512, 512)
CompilerEndIf
StartDrawing(TextureOutput(pl\tx))
Box(0, 0, 512, 512, $52554F)
For x = 0 To 512 Step 64
For y = 0 To 512 Step 64
Box(x, y, 32, 32, $9D989F)
LineXY(x - 16, y, x - 16, y + 32, $FFFFFF)
LineXY(x, y - 16, x + 32, y - 16, $FFFFFF)
Next y
Next x
StopDrawing()
pl\ma = CreateMaterial(#PB_Any, TextureID(pl\tx))
MaterialBlendingMode(pl\ma, #PB_Material_Add) ;<---- Rem this and shadows returns - but material scrolling stops.
MaterialFilteringMode(pl\ma, #PB_Material_Trilinear)
pl\id = CreateEntity(#PB_Any, MeshID(pl\ms), MaterialID(pl\ma), 0, 0, 0)
ScaleEntity(pl\id, 50, 0, 50)
EntityRenderMode(pl\id, 0)
ProcedureReturn #True
EndProcedure
Procedure.i Status()
If IsSprite(#SpritePos) = 0: CreateSprite(#SpritePos, 400, 20) : TransparentSpriteColor(#SpritePos, $0) : EndIf
If IsSprite(#SpriteStat) = 0 : CreateSprite(#SpriteStat, 200, 20) : TransparentSpriteColor(#SpriteStat, $0) : EndIf
StartDrawing(SpriteOutput(#SpritePos))
Box(0, 0, 400, 20, $0)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0, 0, " scrollX: " + StrF(mo\relX,3) + " - ScrollZ: " + StrF(mo\RelZ,3), $FFFF57)
StopDrawing()
;---------------------------------
StartDrawing(SpriteOutput(#SpriteStat))
Box(0, 0, 200, 20, $0)
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(0, 0, " Fps: " + StrF(Engine3DStatus(#PB_Engine3D_AverageFPS), 2), $FFFF57)
StopDrawing()
ProcedureReturn #True
EndProcedure