I've done little to nothing with the OGRE 3D engine so I'm not sure how or if this is supposed to work.
See the following Bug Report.
Include 2D sprites within a 3D environment
Include 2D sprites within a 3D environment
Last edited by JHPJHP on Thu Jul 10, 2025 4:13 pm, edited 3 times in total.
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Include 2D sprites within a 3D environment
Hello again 
When you open a windowed screen together with the OGRE, it does not stretch sprites with window resize, only the 3d render.
However, there are two options:
1, Correct aspect ratio for the 3d scene too by calling resizecamera:
2. Manually size all the sprites to the new aspect ratio using zoomsprite:
PS:I think you just found a bug, as it seems at the old window size the sprites are clipped at least with PB 6.21 beta 9
Never seen this, as I don't allow resizing my 3d screened apps.

When you open a windowed screen together with the OGRE, it does not stretch sprites with window resize, only the 3d render.
However, there are two options:
1, Correct aspect ratio for the 3d scene too by calling resizecamera:
Code: Select all
Enumeration
#MainWindow
EndEnumeration
InitEngine3D() : InitSprite() : InitKeyboard() : ExamineDesktops()
WindowWidth = 600 : WindowHeight = 600
nFlags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_Invisible
If OpenWindow(#MainWindow, 0, 0, WindowWidth, WindowHeight, "Include 2D sprites within a 3D environment", nFlags)
SetWindowColor(#MainWindow, RGB(0, 0, 0))
WindowBounds(#MainWindow, WindowWidth, WindowHeight, #PB_Default, #PB_Default)
If OpenWindowedScreen(WindowID(#MainWindow), 0, 0, WindowWidth, WindowHeight, #True, 0, 0)
SetFrameRate(60) : SpriteQuality(#PB_Sprite_BilinearFiltering)
CreateSprite(0, 20, 20, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing()
EndIf
direction = 2
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Parse3DScripts()
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 5, 0)
CameraLookAt(0, 2, 5, 10)
TextureSky = LoadTexture(#PB_Any, "sky.png")
SkyDome(TextureID(TextureSky), $cc6600, $0088ff, 3, 400, -0.5, 0)
CreateLight(0, $ff88ff, 20000, 40000, 20000)
AmbientColor($010101)
Fog($554488,1, 0, 1024 * 4)
HideWindow(#MainWindow, #False)
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Select EventWindow()
Case #MainWindow : Break 2
EndSelect
Case #PB_Event_SizeWindow
ResizeCamera(0,0,0,100,100) ; this way it does not stretch 3D render
EndSelect
Until Not Event
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape) : Break : EndIf
RenderWorld()
DisplayTransparentSprite(0, x, x)
x + direction
If x > WindowWidth - 20 : direction = -2 : EndIf
If x < 0 : direction = 2 : EndIf
FlipBuffers()
ForEver
EndIf
EndIf
Code: Select all
Enumeration
#MainWindow
EndEnumeration
InitEngine3D() : InitSprite() : InitKeyboard() : ExamineDesktops()
WindowWidth = 600 : WindowHeight = 600
nFlags = #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_ScreenCentered | #PB_Window_Invisible
If OpenWindow(#MainWindow, 0, 0, WindowWidth, WindowHeight, "Include 2D sprites within a 3D environment", nFlags)
SetWindowColor(#MainWindow, RGB(0, 0, 0))
WindowBounds(#MainWindow, WindowWidth, WindowHeight, #PB_Default, #PB_Default)
If OpenWindowedScreen(WindowID(#MainWindow), 0, 0, WindowWidth, WindowHeight, #True, 0, 0)
SetFrameRate(60) : SpriteQuality(#PB_Sprite_BilinearFiltering)
CreateSprite(0, 20, 20, #PB_Sprite_AlphaBlending)
If StartDrawing(SpriteOutput(0))
Box(0, 0, 20, 20, RGB(255, 0, 155))
Box(5, 5, 10, 10, RGB(155, 0, 255))
StopDrawing()
EndIf
direction = 2
Add3DArchive(#PB_Compiler_Home + "examples/3d/Data/Textures", #PB_3DArchive_FileSystem)
Parse3DScripts()
CreateCamera(0, 0, 0, 100, 100)
MoveCamera(0, 0, 5, 0)
CameraLookAt(0, 2, 5, 10)
TextureSky = LoadTexture(#PB_Any, "sky.png")
SkyDome(TextureID(TextureSky), $cc6600, $0088ff, 3, 400, -0.5, 0)
CreateLight(0, $ff88ff, 20000, 40000, 20000)
AmbientColor($010101)
Fog($554488,1, 0, 1024 * 4)
HideWindow(#MainWindow, #False)
Repeat
Repeat
Event = WindowEvent()
Select Event
Case #PB_Event_CloseWindow
Select EventWindow()
Case #MainWindow : Break 2
EndSelect
Case #PB_Event_SizeWindow
ZoomSprite(0,20*WindowWidth(#MainWindow)/windowwidth,20*WindowHeight(#MainWindow)/windowheight)
EndSelect
Until Not Event
ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape) : Break : EndIf
RenderWorld()
DisplayTransparentSprite(0, x, x)
x + direction
If x > WindowWidth - 20 : direction = -2 : EndIf
If x < 0 : direction = 2 : EndIf
FlipBuffers()
ForEver
EndIf
EndIf
Never seen this, as I don't allow resizing my 3d screened apps.
Re: Include 2D sprites within a 3D environment
Hi miso,
Thank you for taking the time to post.
You might be correct that this is a bug. Previously, my 2D Death Star vs Asteroids game stretched in a 3D environment; I just don't have enough experience in this area to say if the changed behaviour is expected.
Note: I'm not sure when the behaviour changed, it's been a while since I've done much PureBasic programming.
Thank you for taking the time to post.
miso wrote:1, Correct aspect ratio for the 3d scene too by calling resizecamera:
I've already tried both methods, but like you without success.miso wrote:2. Manually size all the sprites to the new aspect ratio using zoomsprite:
It's not that sprites are clipped, the 2D environment remains intact but the dimensions stay static when the 3D environment is stretched.miso wrote:PS:I think you just found a bug, as it seems at the old window size the sprites are clipped at least with PB 6.21 beta 9
You might be correct that this is a bug. Previously, my 2D Death Star vs Asteroids game stretched in a 3D environment; I just don't have enough experience in this area to say if the changed behaviour is expected.
Note: I'm not sure when the behaviour changed, it's been a while since I've done much PureBasic programming.
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Include 2D sprites within a 3D environment
2d screens stretches well. Ogre windowed screens increases the viewport for the scene, while for the sprites the viewport remains intact.
Also calling screenwidth()/height() returns the values of the initial screen viewport.
(or I'm doing something wrong, it's always a possibility.)
Also calling screenwidth()/height() returns the values of the initial screen viewport.
(or I'm doing something wrong, it's always a possibility.)
Re: Include 2D sprites within a 3D environment
You know when you do something, turn away for a minute, look back, and that thing you did is gone... you're left wondering if that thing you thought you did was really done in the first place
I'm almost positive I posted a bug report linking back to this thread, but it's gone, without explanation
Anyways, I've updated my first post to better illustrate the expected behaviour. If this has changed, no worries, I was only looking for confirmation.


Anyways, I've updated my first post to better illustrate the expected behaviour. If this has changed, no worries, I was only looking for confirmation.
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Include 2D sprites within a 3D environment
I'm thinking about just open a screen at desktop size and I resize my sprites. 
To be honest, I might not need window resize. I saw the report, it was just a link to here with many long posts
A short clean example is preferred, I think.
Edit: No it's there. Moved to 3D bug reports

To be honest, I might not need window resize. I saw the report, it was just a link to here with many long posts

A short clean example is preferred, I think.
Edit: No it's there. Moved to 3D bug reports

Re: Include 2D sprites within a 3D environment
Hi miso,
Thank you again, not just for posting but also for your keen observation
I already tried starting the screen set to the desktop dimensions, but it doesn't resize the sprite; possibly combined with ZoomSptite, but I think that would clip the screen in a 3D environment.
At this point it's probably best to wait and hear from the powers that be.
Thank you again, not just for posting but also for your keen observation

I already tried starting the screen set to the desktop dimensions, but it doesn't resize the sprite; possibly combined with ZoomSptite, but I think that would clip the screen in a 3D environment.
At this point it's probably best to wait and hear from the powers that be.
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Include 2D sprites within a 3D environment
Zoomsprite is safe and works well, I can guarantee that. I use it a lot.
Re: Include 2D sprites within a 3D environment
Hi miso,
This isn't about any one command but the inclusion of sprites in a 3D environment; I'm sure ZoomSprite has no issues, I've used it myself on occasion.
If you're interested, here are a couple retro games I wrote almost ten years ago:
➤ Invading Space Aliens
➤ Death Star vs Asteroids
• Previously, the sprite screen would resize in the 3D environment.
• REM out line 92 to see why I originally created this thread.
• Press the Spacebar to skip the intro.
Note: Intro was based on code written by DK_PETER.
Be kind, I only wrote these games because I was board and wanted to familiarize myself with the Sprite library.
This isn't about any one command but the inclusion of sprites in a 3D environment; I'm sure ZoomSprite has no issues, I've used it myself on occasion.
If you're interested, here are a couple retro games I wrote almost ten years ago:
➤ Invading Space Aliens
➤ Death Star vs Asteroids
• Previously, the sprite screen would resize in the 3D environment.
• REM out line 92 to see why I originally created this thread.
• Press the Spacebar to skip the intro.
Note: Intro was based on code written by DK_PETER.
Be kind, I only wrote these games because I was board and wanted to familiarize myself with the Sprite library.
Last edited by JHPJHP on Mon May 12, 2025 10:36 pm, edited 2 times in total.
If you're not investing in yourself, you're falling behind.
My PureBasic Stuff ➤ FREE STUFF, Scripts & Programs.
My PureBasic Forum ➤ Questions, Requests & Comments.
Re: Include 2D sprites within a 3D environment
Downloaded, these are quiet cool.
Please give me some time as I browse through the code.
Edit: I started to resize the sprites with 3Dscreen to test, and I just could not get the good ratio. I figured out, that there are DPI resize calls using the user32.dll (I guess PB was not natively DPI aware at the time of creation.) I removed those and the resizing with zoomsprite became correct.
Though it would be a lot of work to resize everything, as there's too many hardcoded sizes and positions. Cool programs though;)

Edit: I started to resize the sprites with 3Dscreen to test, and I just could not get the good ratio. I figured out, that there are DPI resize calls using the user32.dll (I guess PB was not natively DPI aware at the time of creation.) I removed those and the resizing with zoomsprite became correct.
Though it would be a lot of work to resize everything, as there's too many hardcoded sizes and positions. Cool programs though;)