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

Développement 2D, 3D et Jeux Discussion :

Rotation avec quaternion selon un repère précis


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut Rotation avec quaternion selon un repère précis
    Bonjour !


    Voilà quelques heures que je cherche à effectuer une opération mathématique avec des quaternions.

    J'aimerais vraiment maitriser le sujet pour ne plus avoir de problème mais il faut croire que ce n'est pas encore le cas.


    Mon problème (exemple):

    J'ai un avion et un pilote. Alors que l'Avion grimpe à la vertical dans le ciel, le pilote (la camera) veut tourner la tête à droite pour admirer le beau soleil couchant...

    Mon projet est en C++, j'ai une class "standard" de Quaternion style: http://willperone.net/Code/quaternion.php

    Je sais comment effectué une rotation de quaternion selon l'axe local

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    [...]
    Quaternion quatCalc;
     
    quatCalc.FromEulerAngles( DEGTORAD( rotation.x ),
                                        DEGTORAD( rotation.y ),
                                        DEGTORAD( rotation.z ) );
    quatCalc.Normalize();
    quatCurrentRotation = quatCurrentRotation * quatCalc;
    [...]
    ainsi que selon l'axe global:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [...]
    Quaternion quatCalc;
     
    quatCalc.FromEulerAngles( DEGTORAD( rotation.x ),
                                      DEGTORAD( rotation.y ),
                                      DEGTORAD( rotation.z ) );
    hQuatCalc.Normalize();
     
    quatCurrentRotation = quatCalc * quatCurrentRotation;
     
    [...]
    Les rotations des objets sont donc représenté par des quaternions.

    Comment peut-on effectuer la rotation du quaternion du pilote selon le repère définit par la rotation du quaternion de son avion (son parent) ?

    Je pensais pouvoir le faire simplement, comme les autres opérations, mais avec cette fois-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    quatCurrentRotation = parent.quatInvCurrentRotation * quatCalc * quatCurrentRotation * parent.quatCurrentRotation;
    ...sans resultat...

    une idée ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 52
    Points : 41
    Points
    41
    Par défaut
    j'ai repris ces recherches, à tête reposé, et c'est bon !

    bon ma question n'était pas évidente, je poste quand même mon résultat pour si cela arrive à quelqu'un d'autre.
    Pour trouver, je suis partie assez loin, en décomposant toutes les opérations (et en les vérifiant une à une, visuellement).
    Une fois que tout était opérationnel, j'ai simplifié et voilà ce que cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Quaternion quatCalc;
     
    quatCalc.FromEulerAngles( DEGTORAD( rotation.x ),
    				    DEGTORAD( rotation.y ),
    				    DEGTORAD( rotation.z ) );
     
    quatCalc.Normalize();
     
    quatCurrentRotation = parent.quatCurrentRotation * quatCalc * parent.quatInvCurrentRotation * quatCurrentRotation;
    avec parent.quatInvCurrentRotation = parent.quatCurrentRotation.Congugate(); // et parent.quatCurrentRotation normalisé

    Tout cela m'a donné envie de faire un tuto sur les rotations utilisant les quaternions (une sorte de mise en pratique de la FAQ de developpez.net), cela pourrait répondre aux nombreuses questions portant sur le sujet sur les forums. (quand j'aurais un peu de temps, et si cela intéresse du monde :-) )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme Rotation (avec ou sans quaternion)
    Par Scheb dans le forum Moteurs 3D
    Réponses: 6
    Dernier message: 01/05/2012, 19h07
  2. rotation avec des quaternions
    Par tiloup367 dans le forum Mathématiques
    Réponses: 2
    Dernier message: 09/11/2010, 13h17
  3. formulaire de connection avec page selon utilisateur
    Par afrodje dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2007, 17h55
  4. Réponses: 2
    Dernier message: 24/07/2006, 16h23
  5. [Rotations] Rotations Locales/Globales avec Quaternions
    Par Clorish dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 24/05/2005, 16h41

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