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

OpenSceneGraph Discussion :

Recuperation des coordonnees de rotation d'une camera


Sujet :

OpenSceneGraph

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut Recuperation des coordonnees de rotation d'une camera
    Bonjour à tous et à toutes!
    Voici mon problème : je cherche à récupérer les coordonnées d'une camera d'une scène. Je récupère donc en premier lieu la vue qui est osg::viewer* puis je fais donc pView->getCameraManipoulator()-getMatrix() pius pour les coordonnées XYZ je fais un getTrans qui marche très bien. Le problème est quand je fais un getRotate pour les coordonnées HPR cela ne me retourne rien. J'ai l'impression de ne pas avoir HPR dans mon CameraManipulator. Comment puis-je faire?
    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Tout compte fait il me retourne des coordonnees mais je pense avoir des probleme d'unité. En quelle unitée getRotate retourne-t-il les coordonnees?

  3. #3
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut

    Citation Envoyé par glamdrig Voir le message
    Tout compte fait il me retourne des coordonnees mais je pense avoir des probleme d'unité. En quelle unitée getRotate retourne-t-il les coordonnees?
    Il te retourne surtout un quaternion, et pas des coordonnées... c'est dans la doc

    Une rotation définie par des coordonnées, ça ne serait pas super pratique. En général, c'est soit une matrice, soit un quaternion.

    Pour info, un quaternion = un vecteur + un angle (cf la FAQ)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Oui en faite je voulais parler des valeurs du vecteur. J'ai vu que c'était un quaternion et je recupère donc le x,y et z de ce quaternion. Mais les valeurs ne correspondent pas.

  5. #5
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par glamdrig Voir le message
    Mais les valeurs ne correspondent pas.
    Ne correspondent pas à quoi???
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    les valeurs ne correspondent pas aux valeurs pésentent dans le fichier qui s'ouvre. Du style je devrais avoir 0 et j'ai 57.30. C'est très bizare. Voila en gros ce que je fais:

    osg::Matrixd matrixd = pView->getCameraManipulator()->getMatrix();
    // X Y Z
    double x = matrixd.getTrans().x();
    double y = matrixd.getTrans().y();
    double z = matrixd.getTrans().z();

    osg::Vec3d currentXYZ = osg::Vec3d(x,y,z);
    double h;
    double p;
    double r;
    double angle;

    osg::Quat currentHPR = matrixd.getRotate();/*osg::Quat(h,p,r,w)*/;
    currentHPR.getRotate(angle,h,p,r);

    if(currentHPR != m_LastHPR || currentXYZ != m_LastXYZ)
    {
    CString _x;
    _x.Format(_T(" %.4f"), x);
    std::string _xs((LPCTSTR)_x);
    pMainFrm->getCPxStatusEditX()->SetWindowTextA(_xs.c_str());

    CString _y;
    _y.Format(_T(" %.4f"), y);
    std::string _ys((LPCTSTR)_y);
    pMainFrm->getCPxStatusEditY()->SetWindowTextA(_ys.c_str());

    CString _z;
    _z.Format(_T(" %.4f"), z);
    std::string _zs((LPCTSTR)_z);
    pMainFrm->getCPxStatusEditZ()->SetWindowTextA(_zs.c_str());

    m_LastXYZ = osg::Vec3d(x,y,z);

    CString _h;
    _h.Format(_T(" %.2f"), osg::RadiansToDegrees(h));
    std::string _hs((LPCTSTR)_h);
    pMainFrm->getCPxStatusEditH()->SetWindowTextA(_hs.c_str());

    CString _p;
    _p.Format(_T(" %.2f"), osg::RadiansToDegrees(p));
    std::string _ps((LPCTSTR)_p);
    pMainFrm->getCPxStatusEditP()->SetWindowTextA(_ps.c_str());

    CString _r;
    _r.Format(_T(" %.2f"), osg::RadiansToDegrees(r));
    std::string _rs((LPCTSTR)_r);
    pMainFrm->getCPxStatusEditR()->SetWindowTextA(_rs.c_str());

    m_LastHPR = currentHPR;
    }
    Comme je disais pas de probleme pour xyz mais pour hpr.

  7. #7
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    un quaternion est un element à part entiere, tu peux pas le dissequer et recuperer juste les 3 coordonées en esperant qu'elles soient des angles en degrés ....

    pk veux tu découper ton quaternion ?

    il représente la rotation, alors utilise le comme tel... applique sur ce que tu veux ensuite, sans avoir besoin de savoir ce qu'il contient

    PS : un petit tag [OSG] ou [OpenSceneGraph] permet de mieux cerner le topic...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  8. #8
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par Ange_blond Voir le message
    un quaternion est un element à part entiere, tu peux pas le dissequer et recuperer juste les 3 coordonées en esperant qu'elles soient des angles en degrés ....
    Si si, on peut, en utilisant getRotate comme il le fait, ça sert à ça... mais pas comme il fait ensuite par contre, là tu as raison!

    Tu récupères 4 doubles, le premier est un angle, et les 3 autres sont les coordonnées du vecteur représentant l'axe de la rotation. Ne va pas t'amuser à les passer de radians en degrés, ce sont des coordonnées!!!
    Par contre tu peux le faire sur l'angle ça...
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  9. #9
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Pour récuperer 3 angles, le plus "simple" et universel reste les angles d'Eulers ...

    Pour ceci 1 chose : la FAQ. Un algo y est présenté. Je l'ai implémenté pour OSG, il marche à merveille, et il est réversible bien sûr.

    L'avantage des angles d'Euler, c'est leur coté universel. Si tu veux récuperer une rotation en degré ... a mon avis c'est le mieux.
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Merci beaucoup pour vos reponses, tout cela m'éclaire énormement. Il ne me reste plus qu'à convertir mon quaternion en angles de rotation sphérique si j'ai tout compris. Je récupère alors 2 angles : latitude et longitude de la FAQ. Je vais essayer cela lundi.
    Merci à tous les deux, bon week end !

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Points : 25
    Points
    25
    Par défaut
    Bonjour!
    Voila sa marche, j'ai fait une petite fonction qui me convertie mon quat en angles.
    Merci bien.

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

Discussions similaires

  1. recupere des données a partir d-une autre fenetre
    Par b2o92ikho dans le forum Forms
    Réponses: 1
    Dernier message: 09/04/2009, 16h30
  2. [PHP 4] Recuperer des données au sein d'une page HTML
    Par gilles974 dans le forum Langage
    Réponses: 1
    Dernier message: 10/03/2009, 09h36
  3. Recherche d'un texte dans une feuille et recuperation des coordonnees
    Par Youpititi dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/11/2008, 08h48
  4. Réponses: 1
    Dernier message: 07/04/2008, 10h25
  5. Recuperer des coordonnees apres projection...
    Par harsh dans le forum OpenGL
    Réponses: 5
    Dernier message: 09/03/2005, 10h35

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