Bonjour à tous,
j'ai un petit problème de picking, l'axe original d'opengl est défini comme sur l'image qui suit
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);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.
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
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.
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 ?
Partager