problème de picking (C++)
bien le bonjour,
j'ai quelques soucis à utiliser correctement le picking OpenGL, le retour au mode GL_RENDER me renvoit désespérément 0.
lors d'un clic de souris, j'appelle ma fonction picking_selection. Les 2 arruments x et y sont les coordonnées de la souris.
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 28 29 30 31
| int sdl_app::picking_selection(int x, int y){
glPushAttrib(GL_ALL_ATTRIB_BITS);
glSelectBuffer(picking_buffer_size,picking_buffer);
glRenderMode(GL_SELECT); gl_mode=GL_SELECT;
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glGetIntegerv (GL_VIEWPORT, viewport);
gluPickMatrix((GLdouble)x, (GLdouble)y, 50, 50, viewport);
glMatrixMode(GL_MODELVIEW);
glInitNames();
affichage();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glFlush();
picking_hits=glRenderMode(GL_RENDER); gl_mode=GL_RENDER;
glPopAttrib();
cout << picking_hits << " elements sélectionnés" << endl;
return 0;
} |
avec ma fonction d'affichage on ne peut plus simple :
Code:
1 2 3 4 5 6 7 8 9 10 11
| void sdl_app::affichage(){
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
// positionnement de la caméra
// dessin des objets
SDL_GL_SwapBuffers();
} |
Petite précision : lorsque je suis en mode [edit]GL_SELECT[/edit], j'effectue en plus un glLoadName(picking_ID); avant d'afficher chaque objet.
Qu'est-ce qui ne va pas ? que manque-t-il pour que ça fonctionne ?