GlReadPixels et gluUnProject

[Résolu]
Signaler
Messages postés
17
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
5 mai 2007
-
Messages postés
17
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
5 mai 2007
-
Bonjours,
J ai un probleme pour utiliser ces deux fonctions.

Enfaite j ai un cube et avec un mouvement sur ce cube j'essaye de connaitre le vecteur sense (vecteur dessiner par la mouvement de souris)
Bien place dans la fonction clique square j'ai ecrit :

                GLint viewport[4];
                GLdouble modelview[16];
                GLdouble projection[16];

                glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
                glGetDoublev( GL_PROJECTION_MATRIX, projection );
                glGetIntegerv( GL_VIEWPORT, viewport );

                glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_INT,&z);
                gluUnProject(x, y, z, modelview, projection, viewport, (double *)&sourisXY[1], (double *)&sourisXY[2], (double *)&sourisXY[3]);

Enfaite x et y sont les variables de la position de la souris.
sourisXY de 1 a 3 (tableau de 4 variables) est une variable global contenant la possition du point sur le cube cliqué.

Maintenant, bien placé dans la fonction de mouvement de la souris, j'ai ecrit le code suivant :
            GLint viewport[4];
            GLdouble modelview[16];
            GLdouble projection[16];

            glGetDoublev( GL_MODELVIEW_MATRIX, modelview );
            glGetDoublev( GL_PROJECTION_MATRIX, projection );
            glGetIntegerv( GL_VIEWPORT, viewport );

            glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_INT,&z);
            gluUnProject(x, y, z, modelview, projection, viewport, (double *)&X, (double *)&Y, (double *)&Z);

            vectSouris.xyz[0] = X-sourisXY[1];
            vectSouris.xyz[1] = Y-sourisXY[2];
            vectSouris.xyz[2] = Z-sourisXY[3];

avec vectSouris le vecteur correspondant au vecteur de deplacement de la souris.

Enfaite par la suite j'utilise ce vecteur mais j'ai l impression que tous ce que j ai ecrit est faux. Pouvez vous confirmer SVP  et me corriger .

Merci
A voir également:

2 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
Faut se méfier des coordonnées de souris. Dans la fonction gluUnProject, ca doit pas etre (x,y) mais (x, hauteur_fenetre - y). Enfin ya un pb sur l'origine de la fenetre. Sous glut, ca doit etre en haut a gauche et pour glu, en bas a gauche (ou inversement :) ).

Mais pour savoir si ce que tu fais est juste, il suffit d'afficher une petite sphère à la position obtenu avec ta fonction, si elle est bien sous le curseur de a la souris et suit bien son mouvement. Alors ta fonction est correct.
Messages postés
17
Date d'inscription
mardi 10 mai 2005
Statut
Membre
Dernière intervention
5 mai 2007

Oue nikel :) j'avait pas penssé a cette astuce merci :)