Page 1 sur 1

Comment changer de repère ?

Publié : ven. 01/juin/2007 23:10
par bombseb
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 ?

Re: Comment changer de repère ?

Publié : sam. 02/juin/2007 8:05
par Backup
bombseb 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 ?
tu peut voir avec les pivos
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 :) )

Publié : sam. 02/juin/2007 16:24
par bombseb
je viens de regarder les pivots mais je ne comprends pas trop...

si une ame charitable peux m'aider...

Publié : sam. 02/juin/2007 16:25
par minirop
pourquoi vouloir tout placer par rapport à la caméra et pas tout placé statiquement (tjrs au même endroit) et déplacer la caméra ?

Publié : sam. 02/juin/2007 16:35
par tmyke
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 ?

Publié : sam. 02/juin/2007 16:35
par Backup
sinon tu peut toujours connaître l'orientation dans l'espace d'n objet, camera compris :D

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)

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 :D

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

Publié : sam. 02/juin/2007 18:51
par bombseb
je pense que c'est ce que tu cherche a avoir, non ?
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 !!

cool je vous post le code (cubefield), l'effet est plutot sympas :D