Bonjour,
J’ai d’énormes problèmes avec les rotations et je parviens pas à obtenir ce que je veux vraiment.
Je cherche à realiser deux types de rotations :
1)- premier type de rotation, je suis en un point (x,y,z) et je veux regarder à droite, à gauche, en haut,bas ext… sans pour autant « basculer vers la gauche ou la droite ».
Un peu comme un piéton qui après avoir examiner une rue, par exemple, se retrouve avec un horizon bien horizontal.
Ma première méthode consistait à définir un œil fixe et à définir la matrice world.
//position de la caméra
D3DXMATRIX m;
D3DXVECTOR3 at(-0.1f, 0.0f, 0.0f);
D3DXVECTOR3 eye(0.0f, 0.0f, 0.0f);
D3DXVECTOR3 look(0.0f, -1.0f, 0.0f);
D3DXMatrixLookAtLH(&m, &eye, &at, &look);
_device->SetTransform(D3DTS_VIEW,&m);
//Transformation de la matrice World avant remplissage de l’univers
D3DXMatrixRotationY( &matRot, Deplacy ); //Deplacy est l’angle de rotation autour de l’axe y
D3DXMatrixRotationZ( &matRot2, Deplacz ); //Deplacz est l’angle de rotation autour de l’axe z
D3DXMatrixMultiply( &matRot3, &matRot, &matRot2 );
D3DXMatrixRotationY( &matRot, Deplacy );
D3DXMatrixMultiply( &matWorld, &matRot3, &matRot );
Ma deuxième méthode à définir les paramètres de la caméra
observateur.x=objet.x+2.0;
observateur.y=objet.y+2.0;
observateur.z=objet.z+2.0;
target.x=observateur.x+cos(Deplacy)*cos(Deplacx); //Deplacx est l’angle de rotation autour de l’axe y
target.y=observateur.y+cos(Deplacy)*sin(Deplacx); //Deplacy est l’angle de rotation autour de l’axe x
target.z=observateur.z+sin(Deplacy);
D3DXVECTOR3 eye(observateur.x, observateur.y, observateur.z);
D3DXVECTOR3 to(target.x, target.y, target.z);
D3DXVECTOR3 look(0.0f, 0.0f, 1.0f);
D3DXMatrixLookAtLH(&m, &eye, &to, &look);
_device->SetTransform(D3DTS_VIEW,&m);
2)- deuxième type de rotation, je tourne à une distance fixe (d) d’un objet de coordonnées (x,y,z). Je désire pouvoir le voir sous tous les angles depuis mon point d’observation sans avoir l’impression que la rotation se bloque parfois sur certains axes.
Je définis les paramètres de la caméra mais j’ai des mouvements pas toujours satisfaisants…
//Ma camera tourne à une distance de 100 unités de l’objet. La position de la caméra est définie pas les paramètre Deplacy2 et Deplacx2
observateur.x=objet.x+100.0*cos(Deplacy2)*cos(Deplacx2); observateur.y=objet.y+100.0*cos(Deplacy2)*sin(Deplacx2) ;
observateur.z=objet.z+100.0*sin(Deplacy2);
target.x=objet.x;
target.y=objet.y;
target.z=objet.z;
D3DXVECTOR3 eye(observateur.x, observateur.y, observateur.z);
D3DXVECTOR3 to(target.x, target.y, target.z);
D3DXVECTOR3 look(0.0f, 0.0f, 1.0f);
D3DXMatrixLookAtLH(&m, &eye, &to, &look);
_device->SetTransform(D3DTS_VIEW,&m);
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ces méthodes semblent fonctionner convenablement par moment mais il y a des moments où la rotations semble se bloquer. Que se passe-t-il ?
De plus, lorsque je mets à jour les paramètres de la caméra pour générer chaque image, l’animation clignote. Si je définis une caméra fixe, ça marche bien, pourquoi ?
Existe-t-il un site sur ces problèmes de rotations ?
Avec mes remerciements,
Franck RICHARD
(http://winstars.free.fr)
Partager