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.
avec ma fonction d'affichage on ne peut plus simple :
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
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; }
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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(); }
Qu'est-ce qui ne va pas ? que manque-t-il pour que ça fonctionne ?
Partager