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 :
Je soupçonne une énorme bêtise de ma part, mais je n'arrive pas a mettre le doigt dessus.
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();
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 :
PPS: pourtant je n'ai pas trop bu hier soir...
Code : Sélectionner tout - Visualiser dans une fenêtre à part node->translate( repere, vecteur, Ogre::Node::TS_LOCAL );
Partager