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 : 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;
}
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
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 ?