Ce code ne marche pas en utilisant scene_base_GL(), par contre en mettant tout dans scene_GL ça marche. La seule différence est que les paramètre sens et translation sont fixés.

En faisant un printf, je vois que sens et translation ne correspondent pas aux paramètres que j'ai rentré...mais je ne sais pas pourquoi.

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
void scene_base_GL(donnees *d,GLdouble sens,GLdouble translation, GLdouble scale)
{
	GLUquadricObj *quad;
 
	if (!sens)
		sens=1.0;
	else
		sens/=sens;
 
	/* pour gérer seulement la sph  (push et pop) */
	glPushMatrix();
		glColor4f(0.1,0.2,1.0,1.0);
		glTranslatef(0.0,translation,0.0);
		glRotatef(d->spin*d->spin,0.0, 0.0, 1.0);
		glScaled(sens*0.5,0.5,0.5);
		glScaled(scale,scale,scale);
		quad=gluNewQuadric(); 
		gluQuadricNormals(quad, GLU_SMOOTH);
		gluQuadricOrientation(quad, GLU_OUTSIDE); 
		gluSphere(quad,1.0,20,20);
		glPopMatrix();
	gluDeleteQuadric(quad);
 
	glPushMatrix(); 
		glTranslatef(0.0,translation,0.0);
		glRotatef(-d->spin,0.0, 1.0, 0.0);
		glScaled(1.0,sens*1.0,1.0);
		glScaled(scale,scale,scale);
		glColor4f(1.0,0.0,1.0,1.0);
		glRectf(-0.5,-0.5,0.5,0.5);
	glPopMatrix();
 
	glPushMatrix(); 
		glTranslatef(0.2,0.15+translation,0.0);
		glRotatef(sens*d->spin,0.0, 0.0, 1.0);
		glScaled(1.0,1.0,1.0);
		glColor4f(1.0,1.0,0.0,1.0);
		glRectf(-0.5,-0.5,0.5,0.5);
	glPopMatrix();	
}
 
void scene_GL(donnees *d)
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
 
	glEnable(GL_STENCIL_TEST);
	glStencilFunc(GL_ALWAYS, 1, 1);
	glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
	glColorMask(FALSE, FALSE, FALSE, FALSE);
 
	glPushMatrix();
		glColor4f(1.0,1.0,1.0,0.5);
		glRotatef(50.0,1.0, 0.0, 0.0);
		glTranslatef(0.0,0.0,0.4);
		glRectf(-50.0,-50.0,50.0,50.0);
	glPopMatrix();
 
	glColorMask(TRUE, TRUE, TRUE, TRUE);
	glStencilFunc(GL_EQUAL, 1, 1);
	glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
	glDisable(GL_STENCIL_TEST);
 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
	scene_base_GL(d,-1.0,-1.1,0.5);
 
	glPushMatrix();
		glColor4f(1.0,1.0,1.0,0.5);
		glRotatef(50.0,1.0, 0.0, 0.0);
		glTranslatef(0.0,0.0,0.4);
		glRectf(-50.0,-50.0,50.0,50.0);
	glPopMatrix();
 
	scene_base_GL(d,1.0,0.0,0.5);
}