Bonjour,

j'ai un problème pour récupérer les coordonnées du point cliqué dans le repère du "monde openGL"...

apparemment il faut utiliser gluUnProject...
j'ai essayé 2 codes : celui qui est page 110 du red book et un code donné par El Brujo en réponse à ce post : http://www.developpez.net/forums/viewtopic.php?t=69907
mais les 2 solutions ne marchent pas chez moi
les coordonnées renvoyées par gluUnProject sont toujours les mêmes qqe soit le point que je clique ! voici toute ma fonction de gestion 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
32
33
34
35
36
 
void myGlutMouse(int button, int button_state, int x, int y )
{
	double ox, oy, oz;
	double projectionMatrix[16], modelviewMatrix[16];
	int viewport[4];
 
	glGetDoublev(GL_PROJECTION_MATRIX, projectionMatrix);
	glGetDoublev(GL_MODELVIEW_MATRIX, modelviewMatrix);
	glGetIntegerv(GL_VIEWPORT, viewport);
 
	double wy = viewport[3] - y;	//le depth buffer est inversé en y
						//par rapport à ce que l'on voit à l'écran
	double wx = x;
	double wz;
 
	glReadPixels((int)wx, (int)wy, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &wz);
 
	gluUnProject(wx, wy, wz, modelviewMatrix, projectionMatrix, viewport, &ox, &oy, &oz); 
 
	printf("ox = %g, oy = %g, oz = %g\n", ox, oy, oz);
 
	if (button == GLUT_LEFT_BUTTON && button_state == GLUT_DOWN)
	{
		rect_top_left_x = ox;
		rect_top_left_y = oy;
	}
	if (button == GLUT_LEFT_BUTTON && button_state == GLUT_UP)
	{
		rect_width = fabs(ox - rect_top_left_x);
		rect_height = fabs(oy - rect_top_left_y);
	}
	printf("MOUSE : rect_top_left_x = %g, rect_top_left_y = %g\n", rect_top_left_x, rect_top_left_y);
	printf("\trect_width = %g, rect_height = %g\n\n", rect_width, rect_height);
	glutPostRedisplay();
}
vous l'aurez peut-être compris : j'essaye de dessiner un rectangle à la souris : qd on clique j'enregistre les coordonnées du coin en haut à gauche, puis on bouge la souris en gardant le bouton appuyé et qd on lache, je déduis la longueur et la largeur de mon rectangle. puis je le dessine dans la fonction d'affichage :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
glTranslated(rect_top_left_x, rect_top_left_y, 0);
	glBegin(GL_LINE_LOOP);
		glVertex2d(0, 0);
		glVertex2d(rect_width, 0);
		glVertex2d(rect_width, -rect_height);
		glVertex2d(0, -rect_height);
	glEnd();
et donc qd je clique la 1ère fois, il me donne toujours :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ox = 1433.51, oy = -1084.01, oz = 3200.04
MOUSE : rect_top_left_x = 1433.51, rect_top_left_y = -1084.01
        rect_width = 0, rect_height = 0
et qd je relache le bouton, il me donne toujours :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
ox = -0.0101446, oy = 0.00864601, oz = 3200.04
MOUSE : rect_top_left_x = 1433.51, rect_top_left_y = -1084.01
        rect_width = 1433.52, rect_height = 1084.02
ce qui est complètement abérant !

je ne comprends pas du tout ce ki va pas, surtout que je suis assez débutante en openGL...
est-ce qu'il y a des variables d'environnement à "enable" ou qqch d'autre que j'aurai pas fait et ki fait que ça marche pas ?? ou eske c incompatible ac qqch que j'aurais pu faire ???
j'espère que vous aurez des idées !!
Merci d'avance !
$onia