Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1584 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Rotation GluLookAt autour d'un point central

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Rotation GluLookAt autour d'un point central

n°2087676
Dross
Posté le 06-07-2011 à 16:44:43  profilanswer
 

Bonjour à tous,  
 
Je suis en train d'essayer de créer un changement de point de vu dans un projet MFC, l'idée est qu'avec le mouvement en X et Y de la sourie (quand le clic gauche est actif) fasse tourner la camera via la fonction GluLookAt autour d'un point central et toujours orienté vers celui ci.  
 
Ma fonction GlutLookAt est utilisée tel que suit :  

Code :
  1. gluLookAt(pDoc->Eyex,pDoc->Eyey,pDoc->Eyez,pDoc->Eyex+pDoc->Directx,pDoc->Eyey+pDoc->Directy,pDoc->Eyez+pDoc->Directz,0,1,0);


La position de la caméra est donc donnée par Eyex, Eyey et Eyez.
Le point autour duquel je voudrai faire cette rotation est donné par les coordonnées center_x, center_y et center_z.  
 
Ma fonction pour faire cela est telle que suis :  

Code :
  1. void CMyView::OnMouseMove(UINT nFlags, CPoint point)
  2. {
  3. if(IsLButtonDown==TRUE)
  4. {
  5.  // Get a pointer to the document object
  6.  COpenGLViewClassDoc * pDoc = GetDocument();
  7.  double angle_x, angle_z, r;
  8.  r = sqrt((pDoc->Eyex - pDoc->center_x)*(pDoc->Eyex - pDoc->center_x) + (pDoc->Eyey - pDoc->center_y) * (pDoc->Eyey - pDoc->center_y) + (pDoc->Eyez - pDoc->center_z) * (pDoc->Eyez - pDoc->center_z));
  9.  angle_x = atan( (pDoc->center_y - pDoc->Eyey)/(pDoc->center_x - pDoc->Eyex) );
  10.  angle_z = atan( (pDoc->center_z - pDoc->Eyez)/(pDoc->center_y - pDoc->Eyey) );
  11.  angle_x -= (point.x - CurrentPosition.x) / 20.0 ;
  12.  angle_z -= (point.y - CurrentPosition.y) / 20.0 ;
  13.  pDoc->Eyex = r * cos(angle_x);
  14.  pDoc->Eyey = r * sin(angle_x);
  15.  pDoc->Eyez = r * sin(angle_z);
  16.  CurrentPosition = point ;
  17.  InvalidateRect(FALSE);
  18. }
  19. else
  20. {
  21.  CView::OnMouseMove(nFlags, point);
  22. }
  23. }


 
l'angle_x est l'angle entre le vecteur X et le vecteur [centre, eye] dans le plan X,Y  
l'angle_z est l'angle entre le plan X,Y et le vecteur [centre, eye] dans le plan Z, [centre; projection de eye sur plan X,Y]
 
J'essaye pour l'instant d'avoir la bonne trajectoire pour les coordonnées X,Y,Z de GluLookAt, je n'ai pas encore codé la partie d'orientation.
Mes projections me semblent bonne mais au final le script fait un peu n'importe quoi à l'écran (c'est bien qu'un problème de mathématique, car ma fonction OnMouseMove fonctionne correctement quand je fait faire à ma caméra que des translations dans un plan).  
 
Avez vous une idée d'où cela peux venir ? Où une autre manière de faire  ?
 
Merci d'avance pour votre aide.

mood
Publicité
Posté le 06-07-2011 à 16:44:43  profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Rotation GluLookAt autour d'un point central

 

Sujets relatifs
Jeu de Point & Click : C++ ou Actionscript ?Quiz + compteur de point en php
Faire une rotation de 2 octets[VBA Autocad] dessiner la symétrie d'un point par rapport à une ligne.
Trouver le sens de rotation d'un polygone[MATH] Matrice de projection d'un point sur un plan
Rotation d’une matrice en PythonScript pour rotation de bannière
[VBA]modifier point d'entrée du programme [Resolu]Macro remplacement de point par virgules
Plus de sujets relatifs à : Rotation GluLookAt autour d'un point central


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR