IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

Problème de rotation


Sujet :

DirectX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 68
    Points : 34
    Points
    34
    Par défaut Problème de rotation
    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)

  2. #2
    Membre régulier
    Inscrit en
    Mai 2003
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Certaines fornules sont a vue de nez fausses.

    Un coup de google sur les quaternions, le Gimbal Lock et Yaw Pitch Roll... et ensuite reprendre completement le code.
    Laurent -- http://jeux-directx.com/

Discussions similaires

  1. Problème image rotator
    Par eiffel74 dans le forum ASP
    Réponses: 1
    Dernier message: 10/04/2007, 23h02
  2. Problème de rotation
    Par Syphon dans le forum Flash
    Réponses: 9
    Dernier message: 11/01/2007, 10h27
  3. Problème de rotation => "rideau noir"
    Par alex6891 dans le forum OpenGL
    Réponses: 19
    Dernier message: 29/07/2006, 21h25
  4. Réponses: 4
    Dernier message: 20/03/2006, 21h26
  5. [OpenGL] problème de rotation 3D
    Par ReiVon dans le forum OpenGL
    Réponses: 3
    Dernier message: 11/04/2005, 09h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo