Problème de picking sur axe Z inversé
Bonjour à tous,
j'ai un petit problème de picking, l'axe original d'opengl est défini comme sur l'image qui suit
http://resumbrae.com/ub/dms424_s03/03/coordSystem.jpg
Mais l'ai décidé de faire un scale de -1 en Z afin d'avoir l'axe Z en profondeur.
Mon problème : le picking fonctionne ne fonctionne plus lors que je fais le scale négatif.
J'utilise 2 simples morceau de code:
Code:
1 2 3 4 5 6 7 8 9 10 11
| /** Code pour afficher la caméra **/
glLoadIdentity();
glScalef (1., 1., -1.);
//Multiplication avec la matrice de la caméra
glMatrixMode(GL_PROJECTION);
glMultMatrixd(_projectionMatrix);
glMatrixMode(GL_MODELVIEW);
glMultMatrixd(_modelViewMatrix); |
Code:
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 26 27
| /** code pour selectionner des models **/
makeCurrent();
// Prepare le mode de sélection
// les paramètres retournes respectivement un int et un pointeur vers un int.
glSelectBuffer(selectBufferSize(), selectBuffer());
glRenderMode(GL_SELECT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//A
static GLint viewport[4];
//récupération du viewport de la caméra
currentCamera()->getViewport(viewport);
//B
//pick par rapport à un rectangle de sélection
gluPickMatrix(point.x(), point.y(), selection.width(), selection.height(), viewport);
//C
//Multiplication avec la matrice de la caméra
glMatrixMode(GL_PROJECTION);
glMultMatrixd(_projectionMatrix);
glMatrixMode(GL_MODELVIEW);
glMultMatrixd(_modelViewMatrix);
//D
glRenderMode(GL_SELECT);
//E
drawWithNames(); //Fonction perso pour dessiner les objets en fonction de s'il ont été sélectionnés ou non. |
J'ai essayé de faire mettre glScalef (1., 1., -1.), dans le code de selection, à tous les emplacements possibles (A,B,C,D,E) sans succès.
Quelqu'un aurait-il une idée de ce que je pourrais utiliser afin que le scale négatif en Z soit prix en compte par le mode de sélection ?