En fait, c'est très simple, comme tu le dis il n'y a pas besoin de calcul hyper complexe.
Il faut employer la capacité du moteur a adjoindre a une entity un enfant.
Dans ce cas, tu créé un entity camera, puis ensuite tu lui affilie un enfant de ton choix.
Pour illustrer cela, voici un petit code asser simple (les media sont ceux du pack)
Code : Tout sélectionner
; files Include
IncludePath "Include\" : IncludeFile "dreamotion3d.pbi"
; Globales
Global anglex.f, angley.f, flagXDown.w
Global mox.f, omx.f, moy.l, omy.l
Global *camera.CEntity
Global *land.CEntity
Global *mesh.CEntity
Global *font.CFont
Global Quit.b
; Initialisation des différents modules
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
End
EndIf
; Init PB modules
DM_Graphics3D(800, 600, 32, 0, 1)
; load font
*font = DM_LoadFont( "Tahoma",9 , 0)
DM_TextColor(*font, 198,198,198,255)
; change directory for media
SetCurrentDirectory("media/")
; Set ambiant color
DM_AmbiantLight(150, 150, 150)
; ---------------------------------------------------------------
; un petit terrain, histoire de se situer dans l'espace
; ---------------------------------------------------------------
*land = DM_LoadMesh("land.x")
; ---------------------------------------
; caméras
; ---------------------------------------
*camera = DM_CreateCamera()
DM_MoveEntity(*camera, 0,0,-50)
DM_CameraClsColor(*camera, 125, 125, 125)
; ici, donc on créé un cube, que l'on affilie
; a la camera
*mesh = DM_CreateCube(*camera)
DM_TranslateEntity(*mesh, 0,0,14)
; ---------------------------------------
; main loop
; ---------------------------------------
; if fullscreen, must do it for keep mouse cursor
;change_curseur( #IDC_ARROW )
Repeat
ExamineKeyboard()
ExamineMouse()
ShowCursor_(1)
; if Escape Key, exit
If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
Quit=1
EndIf
; move camera with dir key and mouse (left click)
If KeyboardPushed(#PB_Key_Up)
DM_MoveEntity(*camera, 0,0,4)
ElseIf KeyboardPushed(#PB_Key_Down)
DM_MoveEntity(*camera, 0,0,-4)
EndIf
If MouseButton(#PB_MouseButton_Left)
If flagXdown=0
omx = MouseX()
omy = MouseY()
flagXDown=11
Else
moy = MouseY()-omy
angley=(moy/5.0)
omy= MouseY()
mox = MouseX()-omx
anglex=(mox/5.0)
omx= MouseX()
DM_TurnEntity(*camera, angley,anglex,0)
EndIf
Else
flagXDown=0
EndIf
DM_TurnEntity(*mesh, 0,1,0)
; ---------------
; Render
; ---------------
DM_BeginScene()
DM_RenderWorld()
; display FPS value
DM_DrawText(*font, 10, 15, "FPS : "+Str(DM_FPS()))
DM_EndScene()
Until Quit=1
; end
DM_ClearGraphics()
End
je pense que c'est ce que tu cherche a avoir, non ?