Bonjour, je souhaiterais créer des carrés à l'endroit ou je clique sur la fenêtre (utilisation de Glut) mais cela ne marche malheureusement pas. Il me semble que le problème vient des coordonnées de la souris et Glut qui ne sont pas les même d'où l'utilisation d'un glOrtho. Mais cela ne marche toujours pas, peut être est-ce du à une mauvaise utilisation de cette fonction ou tout simplement le problème ne vient pas de là. Je vous passe mon code et vous remercie d'avance !

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
 
#include <stdio.h>
#include <stdlib.h>
#include <GL/glut.h>
 
 
 
void tracerpoly(int x,int y){
	printf("x=%d et y=%d\n",x,y);
	glColor3f(0.4,0.8,0.4);
	glBegin(GL_POLYGON);
	glVertex2f(x-0.15,y-0.15);
	glVertex2f(x+0.15,y-0.15);
	glVertex2f(x+0.15,y+0.15);
	glVertex2f(x-0.15,y+0.15);
	glEnd();
}
 
void affichage(void) {
	glClear (GL_COLOR_BUFFER_BIT);
	tracerpoly(0,0);
	glutSwapBuffers();
}
 
 
void redim(int width, int height){
	glViewport(0,0,width,height);
	glOrtho(0,800,0,600,0.1,1000);
}
 
void clavier(unsigned char key, int x, int y){
	switch(key) {
		case 27:
		case 'q':
		case 'Q': exit(0);
		break;
		case 'r' : glClearColor(1., 0., 0., 1.); /* rouge */ 
		break;
		case 'v' : glClearColor(0., 1., 0., 1.); /* vert */ 
		break;
		case 'b' : glClearColor(0., 0., 1., 1.); /* bleu */ 
	}
	glutPostRedisplay();
}
 
void ChoixMenuPrincipal(int value) {
switch (value) { 
	case 10 : exit(0);
break;
}
}
 
 
void ChoixSousMenu(int value) { 
	printf("Choix sous menu numero %d\n", value); 
	switch (value) {
		case 1 : glClearColor(1., 0., 0., 1.); /* rouge */ 
		break;
		case 2 : glClearColor(0., 1., 0., 1.); /* vert */ 
		break;
		case 3 : glClearColor(0., 0., 1., 1.); /* bleu */ 
		break;
		case 4 : glPolygonMode( GL_FRONT, GL_FILL ); 
		break;
		case 5 : glPolygonMode( GL_FRONT, GL_LINE );
		break;
	} glutPostRedisplay();
}
 
void CreerMenu(void) { 
	int sousMenu;
	sousMenu = glutCreateMenu(ChoixSousMenu); 
	glutAddMenuEntry("Rouge",1); 
	glutAddMenuEntry("Vert",2); 
	glutAddMenuEntry("Bleu",3);
	glutAddMenuEntry("Rempli",4);
	glutAddMenuEntry("Aretes",5);
	glutCreateMenu(ChoixMenuPrincipal);	
	glutAddSubMenu("Mon carré",sousMenu); 
	glutAddMenuEntry("Quitter",10);
	glutAttachMenu(GLUT_RIGHT_BUTTON);
 
}
 
void souris(int button, int state, int x, int y)
{
 
  if (button == GLUT_LEFT_BUTTON)
    {
		if(state==GLUT_DOWN){
      tracerpoly(x,y);
	  glutPostRedisplay();
	 }
 
    }
}
 
int main ( int argc, char** argv){
 
 
	glutInit(&argc, argv);
	glutInitWindowSize(800,600);
	glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
 
	glutCreateWindow("Ma fenêtre");
	glClearColor(0,0,0,0);
	glutDisplayFunc(affichage);
	glutReshapeFunc(redim);
	glutKeyboardFunc(clavier);
	glutMouseFunc(souris);
	CreerMenu();
	glutMainLoop();
 
	return 0;
}