Page 1 of 1
2D and 3D
Posted: Sat Feb 16, 2008 10:00 am
by sampb
Hi all,
Purebasic has built-in 2D commands and support OGRE.
Could we use these 2D commands in 3D engine?
Or, we need to use another set of 2D commands for 3D engine?
Thanks in advance
Posted: Sat Feb 16, 2008 12:10 pm
by Num3
You can use both at the same time, they work together.
That is the reason OGRE PB has not been updated yet, because both 2D and 3D use DX7 and the newer OGRE engine is DX9!
I took the SkyBox.pb example and added some 2d, take a look:
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - SkyBox
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
; Thanks to Steve 'Sinbad' Streeting for the nice SkyBox !
;
#CameraSpeed = 15
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If Screen3DRequester()
CreateMaterial(0, LoadTexture(0, "r2skin.jpg"))
CreateEntity(0, LoadMesh(0, "Robot.mesh"), MaterialID(0))
SkyBox("desert07.jpg")
CreateCamera(0,0,0,100,100)
CameraLocate(0,0,0,100)
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()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
;**** 2d Stuff here after you rendered the 3D world
StartDrawing(ScreenOutput())
Circle(50,50,30,$FFFF00)
StopDrawing()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Posted: Sun Feb 17, 2008 9:39 am
by Comtois
if you want 3D on 2D use CameraBackColor(#Camera, -1).
and you can use 2D commands for createTexture
Code: Select all
;-Textures
#Texture = 0
CreateTexture(#Texture, 256, 256)
StartDrawing(TextureOutput(#Texture))
Box(0, 0, TextureWidth(#Texture), TextureHeight(#Texture), $FFFFFF)
DrawText(12,12,"Test",#Red)
StopDrawing()
And you can display sprite and 3D.
Posted: Sun Feb 17, 2008 9:54 am
by sampb
@Num3 and Comtois: Does OGRE has its own 2D commands for displaying HUD (Head up display)? Or, I could just use purebasic built-in 2D commands to do HUD?

Posted: Sun Feb 17, 2008 9:58 am
by Comtois
sampb wrote:@Num3 and Comtois: Does OGRE has its own 2D commands for displaying HUD (Head up display)? Or, I could just use purebasic built-in 2D commands to do HUD?

Ogre doesn't have 2D commands .
Use purebasic built-in 2D commands to do HUD, it work fine.
You can also use Sprite3D for better effect.
[EDIT]
using example from Num3 , added Sprite3D
Code: Select all
;
; ------------------------------------------------------------
;
; PureBasic - SkyBox
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;
; Thanks to Steve 'Sinbad' Streeting for the nice SkyBox !
;
#CameraSpeed = 15
Global ScreenWidth, ScreenHeight
IncludeFile "Screen3DRequester.pb"
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitSprite3D()
InitKeyboard()
InitMouse()
If Screen3DRequester()
CreateMaterial(0,LoadTexture(0, "r2skin.jpg"))
CreateEntity(0, LoadMesh(0, "Robot.mesh"), MaterialID(0))
SkyBox("desert07.jpg")
CreateCamera(0,0,0,100,100)
CameraLocate(0,0,0,100)
CreateSprite(0,ScreenWidth, ScreenHeight,#PB_Sprite_Texture)
StartDrawing(SpriteOutput(0))
Box(0,0,ScreenWidth,ScreenHeight,#Blue)
Circle(ScreenWidth/2,ScreenHeight/2,ScreenHeight/3,#Black)
StopDrawing()
CreateSprite3D(0,0)
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()/10)*#CameraSpeed/2
MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2
EndIf
RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyX, 0, KeyY)
RenderWorld()
Screen3DStats()
;**** 2d Stuff here after you rendered the 3D world
Start3D()
DisplaySprite3D(0,0,0,70)
Stop3D()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
End
Posted: Tue Feb 19, 2008 8:04 am
by sampb
Thank you, Num3 and Comtois.