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 28 29 30 31 32 33 34 35 36 37 38 39 40
|
glGetIntegerv(GL_VIEWPORT, viewport);
glSelectBuffer(BUFSIZE,selectBuf);
//on passe en mode selection
glRenderMode(GL_SELECT);
//on initialise la pile de noms
glInitNames();
//on empile qqchose dans la matrice de noms sinon erreur avec le glLoadName
glPushName(0);
glMatrixMode (GL_PROJECTION);
glPushMatrix (); /* push projection */
glLoadIdentity ();
gluPickMatrix ((GLdouble) x, (GLdouble) (viewport[3] - y), 5.0, 5.0, viewport);
gluOrtho2D(0,SCREEN_WIDTH,0,SCREEN_HEIGHT);
//on empile les 4 carrées dans la matrice de noms
affiche_carre();
/**** C'est bizarre ce que t'as fait ici... :? ****/
/* Plusieurs choses:
/* Premièrement, l'appel à glFlush() doit se faire pour FINALISER le rendu une
/* fois que la situation le permet. glFlush() + swap buffers = fin de la frame
/* Deuxièmement... Tu fais quoi là en fait ?
/* Il suffit de dépiler la matrice de projection que tu avais précédement empilé et c'est tout...
/**** ****/
glPopMatrix();
glFlush();
glMatrixMode(GL_MODELVIEW);
glPushMatrix(); /* push modelview */
glLoadIdentity();
//on voit les differents hits atteint
hits = glRenderMode(GL_RENDER);
processHits (hits, selectBuf); |