Peut être n'ai je pas bien compris le fonctionnement de la fonction
CameraProjectionMode(#Camera, Mode [, Width, Height])
Cette fonctionnalité permet de corriger le volume de visualisation de la caméra après un resize du screen par exemple.
j'ai noté que cette fonctionnalité ne figure pas dans l'aide en français mais figure dans l'aide en anglais.
https://www.purebasic.com/documentation ... nmode.html
Avec ce code il est possible de redimensionner une fenêtre 3D mais souci, la correction de la perspective ne fonctionne pas. Les entités 3D ne sont pas redimensionnées correctement.
Code : Tout sélectionner
Enumeration window
#mf
EndEnumeration
; Window
Global Event, ww = 1024, wh = 768
; 3D
Global Camera, Entity0, Entity1
; Summary
Declare Start()
Declare Render()
Declare Resize()
Declare Exit()
;-
InitEngine3D()
InitSprite()
InitKeyboard()
Start()
Procedure Start()
OpenWindow(#mf, 0, 0, ww, wh, "Volume 3D correction", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
OpenWindowedScreen(WindowID(#mf), 0, 0, ww, wh, #True, 0, 0)
Camera = CreateCamera(#PB_Any, 0, 0, 100, 100)
CameraBackColor(Camera, RGB(245, 222, 179))
MoveCamera(Camera, 5, 5, 10)
CameraLookAt(Camera, 0, 0, 0)
CreateLight(#PB_Any, RGB(255, 255, 255), 0, 10, 10)
Entity0 = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 2)), #PB_Material_None, 0, 2, 0)
Entity1 = CreateEntity(#PB_Any, MeshID(CreateCube(#PB_Any, 2)), #PB_Material_None, 0, -2, 0)
BindEvent(#PB_Event_CloseWindow, @Exit())
BindEvent(#PB_Event_SizeWindow, @Resize())
Render()
EndProcedure
Procedure Render()
Repeat
Repeat
Event = WindowEvent()
Until Event = 0
RenderWorld()
FlipBuffers()
If ExamineKeyboard()
If KeyboardReleased(#PB_Key_Escape)
Exit()
EndIf
EndIf
RotateEntity(Entity0, 0.5, 0.5, 0.5, #PB_Relative)
RotateEntity(Entity1, 0.3, 0.3, 0.3, #PB_Relative)
ClearScreen(RGB(128, 128, 128))
ForEver
EndProcedure
Procedure Resize()
;Protected sw = ScreenWidth()
;Protected sh = ScreenHeight()
Protected sw = WindowWidth(#mf, #PB_Window_InnerCoordinate)
Protected sh = WindowHeight(#mf, #PB_Window_InnerCoordinate)
CameraProjectionMode(Camera, #PB_Camera_Perspective, sw, sh)
EndProcedure
Procedure Exit()
End
EndProcedure