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

OpenGL Discussion :

GLM convertir Matrice d'orientation en 3 angles pour "angleAxis"


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Par défaut GLM convertir Matrice d'orientation en 3 angles pour "angleAxis"
    Bonjour,

    J'aimerais convertir une Matrice d'orientation en 3 angles pour "angleAxis".
    J'utilise #define GLM_FORCE_RADIANS. (pour des angles en radian)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    glm::quat myXQuat = glm::angleAxis(2.0f, m_Right);        // m_Right   = (1,0,0)
    glm::quat myYQuat = glm::angleAxis(3.1415f, m_Up);        // m_Up      = (0,1,0)
    glm::quat myZQuat = glm::angleAxis(3.1415f, m_Forward);   // m_Forward = (0,0,1)
    glm::quat Result = myXQuat * myYQuat * myZQuat;
    
    glm::mat4 m_Rotate = glm::toMat4(Result);
    
    // Ici la fonction que j'aimerais avoir. Je veux que cette fonction retourne (2, 3.1415, 3.1415)
    glm::vec3 angles = Matrix2Angles(m_Rotate);
    J'ai rien trouvé sur Google pour ça.
    Merci pour votre aide et vos informations.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    311
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 311
    Par défaut
    Salut,

    Je ne connais pas GLM mais apriori si tu calcule le produit scalaire entre chaque axe (right, up et forward) de ta matrice de rotation avec tes axes unités (m_Right, m_Up et m_Forward) tu obtiendras les cosinus de chaque angle.

    Mais comme une matrice de rotation peut être obtenus de plusieurs manière tu n‘obtiendras pas forcement les même angles, C’est pourquoi je te conseille, si tu manipule tes entités 3D par les angles d’Euler, de les garder et de recomposer ta matrice model à partir de ceux-ci, et si GLM ne dispose pas d’une méthodes RotateFromEuler(tilt,pan,roll,eulerorder) alors change vite de librairie !

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Par défaut
    Merci p3ga5e pour ton aide.

    Je convertis mes angles d'euler en Quaternion pour éviter le Gimbal Lock.
    Comme ceci http://jeux.developpez.com/faq/math/...uaternions#Q60

    Pour faire des rotations XYZ avec les angles d'Euler il y a dans GLM. (avec Gimbal Lock)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glm::mat4 m_Rotation = glm::yawPitchRoll(3.1415f, 2.0f, 3.1415f);    // YXZ
    glm::quat Result = glm::toQuat(m_Rotation);
    glm::vec3 angles = glm::eulerAngles(Result);
    Ici angles me donne (1.96524894, 0.316596597, -0.0871095583)


    Et Pour faire des rotations XYZ avec les Quaternion il y a dans GLM. (sans Gimbal Lock)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    glm::quat myXQuat = glm::angleAxis(2.0f, m_Right);        // m_Right   = (1,0,0)
    glm::quat myYQuat = glm::angleAxis(3.1415f, m_Up);        // m_Up      = (0,1,0)
    glm::quat myZQuat = glm::angleAxis(3.1415f, m_Forward);   // m_Forward = (0,0,1)
    glm::quat Result = myXQuat * myYQuat * myZQuat;
    
    glm::vec3 qAngles = glm::eulerAngles(Result);
    
    glm::mat4 m_Rotate = glm::toMat4(Result);
    
    glm::quat Result2 = glm::toQuat(m_Rotation);
    glm::vec3 angles = glm::eulerAngles(Result2);
    Ici angles et qAngles me donne (-1.14159262, 4.56940506e-005, 0.000122812213)

    Je cherche à faire une Class de rotation en utilisant soit les angles soit un Quaternion tout en étant capable de convertir le Quaternion en Angles et de convertir les Angles en Quaternion sans Gimbal Lock et avec les bonnes valeurs.
    Je sais pas si c'est possible?

    Merci

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/04/2013, 18h17
  2. Matrice de rotation 3x3 et angles d'Euler
    Par bachintosh dans le forum Traitement d'images
    Réponses: 1
    Dernier message: 23/03/2012, 17h55
  3. Convertir matrice en fichier texte
    Par chronos21 dans le forum MATLAB
    Réponses: 2
    Dernier message: 05/11/2009, 14h26
  4. Orientation d'un document pour un PrintPreviewDialog
    Par gluc86 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 04/01/2008, 12h17
  5. Orientation d'un document pour un PrintPreviewDialog
    Par gluc86 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/01/2008, 12h00

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