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