Comment changer de repère ?

Généralités sur la programmation 3D
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Comment changer de repère ?

Message 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 ?
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Comment changer de repère ?

Message 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 :) )
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message par bombseb »

je viens de regarder les pivots mais je ne comprends pas trop...

si une ame charitable peux m'aider...
minirop
Messages : 321
Inscription : mer. 02/août/2006 21:06

Message 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 ?
tmyke
Messages : 1554
Inscription : lun. 24/juil./2006 6:44
Localisation : vosges (France) 47°54'39.06"N 6°20'06.39"E

Message 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 ?
Dernière modification par tmyke le sam. 02/juin/2007 16:37, modifié 3 fois.
Force et sagesse...
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message 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
bombseb
Messages : 445
Inscription : jeu. 25/août/2005 22:59
Localisation : 974
Contact :

Message 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
Répondre