Bonsoir,
Est-ce que vous savez si c'est possible de changer de repère (j'utilise dreamotion) je m'explique :
j'aimerais que le repère x,y,z ne soit plus celui par défaut mais qu'il soit redéfini comme étant la position de la caméra... ca me permettrait de placer des objets relativement à la position et à l'angle de la caméra sans avoir à faire des calculs hyper compliqués...
quelqu'un a une idée svp ?
Comment changer de repère ?
Comment changer de repère ?
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
Re: Comment changer de repère ?
tu peut voir avec les pivosbombseb a écrit :Bonsoir,
Est-ce que vous savez si c'est possible de changer de repère (j'utilise dreamotion) je m'explique :
j'aimerais que le repère x,y,z ne soit plus celui par défaut mais qu'il soit redéfini comme étant la position de la caméra... ca me permettrait de placer des objets relativement à la position et à l'angle de la caméra sans avoir à faire des calculs hyper compliqués...
quelqu'un a une idée svp ?
chaque objet peut avoir un pivo modifier, mais j'me souvien plus trop comment on fait (en fait je doit partir, pas le temps la

je viens de regarder les pivots mais je ne comprends pas trop...
si une ame charitable peux m'aider...
si une ame charitable peux m'aider...
Quelques manoucheries : I can't give you anything but love / Stompin' at decca
-
- Messages : 1554
- Inscription : lun. 24/juil./2006 6:44
- Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E
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)
je pense que c'est ce que tu cherche a avoir, non ?
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
Dernière modification par tmyke le sam. 02/juin/2007 16:37, modifié 3 fois.
Force et sagesse...
sinon tu peut toujours connaître l'orientation dans l'espace d'n objet, camera compris 
avec ces fonctions la
pour cette exemple rolz,x,y recupere les angles de mon objet Tortue
donc si tu met le pointeur de la camera , ça va faire pareil avec la Camera
une fois que tu as les angles de ta camera; rien ne t'empêche 'orienter pareil les angles de tes objets

avec ces fonctions la
Code : Tout sélectionner
rolz= DM_EntityYaw.f(*tortue3d, #True)
rolx= DM_EntityRoll.f(*tortue3d,#True)
roly=- DM_EntityPitch.f(*tortue3d,#True)
donc si tu met le pointeur de la camera , ça va faire pareil avec la Camera

une fois que tu as les angles de ta camera; rien ne t'empêche 'orienter pareil les angles de tes objets

super, c'est ca ! en fait j'ai utilisé DM_EntityParent(*camera), puis je place mon objet avec DM_PositionEntity et là ca me le place par rapport à la caméra !!je pense que c'est ce que tu cherche a avoir, non ?
cool je vous post le code (cubefield), l'effet est plutot sympas

Quelques manoucheries : I can't give you anything but love / Stompin' at decca