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 :

opengl : probleme vecteur local a un objet


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut opengl : probleme vecteur local a un objet
    Salut et bonne année,

    Je veux récupérer un axe local à un objet pour obtenir un vecteur de déplacement dans les coordonnées "monde" en openGL.

    Dans ce cas, je récupère l'axe Z pour avoir mon vecteur de déplacement UP.

    Le problème est que le "vecteur" obtenu n'est pas du tout ce que je m'attend à avoir !

    Ca donne à peut près ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    	glMatrixMode( GL_PROJECTION );
            glLoadIdentity();
            gluPerspective( 65.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f );
     
            glMatrixMode( GL_MODELVIEW );
            glLoadIdentity();
            gluLookAt(-10.0f, -10.0f, 10.0f, mX,mY, mZ, 0.0f, 0.0f, 1.0f );
     
    	glPushMatrix();
                glTranslatef(mX,mY,mZ);
     
                glRotatef(mYaw, 0,0,1 );
                glRotatef(mPitch, 0,1,0);
                glRotatef(mRoll, 1,0,0 );
     
                drawBoundingBox(1.1,1.1,1.1);
     
    	    glGetFloatv(GL_MODELVIEW_MATRIX,modelview);
                // get the local Z axis  = UP vector here
                mDirUpX=modelview[8];
                mDirUpY=modelview[9];
                mDirUpZ=modelview[10];
     
          glPopMatrix();
    Je soupçonne une énorme bêtise de ma part, mais je n'arrive pas a mettre le doigt dessus.

    Un regard supplementaire ne serait pas superflu !

    ( bien sûr on pourrait multiplier le vecteur (0,0,1) par la matrice de l'objet, mais je doute que ça donne un meilleur résultat que cette "simple" astuce de piquer directement les données dans la MODELVIEW_MATRIX. )


    PS: avec Ogre, ce problème est résolu à grand coups de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    node->translate( repere, vecteur, Ogre::Node::TS_LOCAL );
    PPS: pourtant je n'ai pas trop bu hier soir...

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    bon, j'ai trouvé... mais je ne suis pas sûr de comprendre pourquoi :

    apparement, le fait de remettre à identity la MODELVIEW_MATRIX règle le problème...

    au lieu de faire :
    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       pushmatrix
           translation
           rotation
           tracer l'objet
           grab de l'axe Z
       popmatrix

    il faut faire :

    Code X : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
       pushmatrix
           translation
           rotation
           tracer l'objet
    
           pushmatrix
               loadidentity
               rotation
               grab de l'axe Z
           popmatrix
    
       popmatrix

  3. #3
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 536
    Points : 5 219
    Points
    5 219
    Par défaut
    Citation Envoyé par lanael
    bon, j'ai trouvé... mais je ne suis pas sûr de comprendre pourquoi :

    apparement, le fait de remettre à identity la MODELVIEW_MATRIX règle le problème...
    et gluLookAt, tu penses qu'il ne modifie pas ta matrice ?
    si tu fais un glLoadIdentity après un gluLookAt, tu annules les "effets" du gluLookAt

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par shenron666
    et gluLookAt, tu penses qu'il ne modifie pas ta matrice ?
    si bien sûr : je récupérais pas les coordonées "mondes" parce que le gluLookat modifie la matrice "finale" pour faire tourner tous les points en fonction de l'observateur...

    Je suis un peu embarrassé. On va dire que c'était le manque de sommeil, hein ?!


    Merci Dragon Sacré de l'Enfer.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/01/2009, 23h50
  2. Probleme vecteur d'objet changeant tout seul
    Par mathildeclair dans le forum C++
    Réponses: 6
    Dernier message: 22/05/2008, 18h26
  3. [FLASH MX] Probleme avec le drag d'objet
    Par Toutouffe dans le forum Flash
    Réponses: 3
    Dernier message: 23/01/2005, 23h41
  4. Probleme register local server dans ibconsole
    Par BOUBOU81 dans le forum Outils
    Réponses: 7
    Dernier message: 05/11/2004, 13h17
  5. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 17h20

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