Etant donné qu'il s'agit d'autre chose que du stencil buffer, je préfère créer une autre conversation!

Dans les techniques de shadow volume, en utilisant le double passe, (cf. NEHE), on dessine en toute fin de la fonction un rectangle:

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
void TracerOmbre(vertex_type A, vertex_type B)
{

        glPushAttrib( GL_ALL_ATTRIB_BITS );
	glDisable( GL_LIGHTING );					// Turn Off Lighting
	glDepthMask( GL_FALSE );					// Turn Off Writing To The Depth-Buffer
	glDepthFunc( GL_LEQUAL );
	glEnable(GL_STENCIL_TEST);					// Turn On Stencil Buffer Testing
	glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE );		// Don't Draw Into The Colour Buffer
	glStencilFunc( GL_ALWAYS, 1, 0xFFFFFFFF );


	// First Pass. Increase Stencil Value In The Shadow
	glFrontFace( GL_CCW );
	glStencilOp( GL_KEEP, GL_KEEP, GL_INCR );
        TracerProjection( A, B);



  	// Second Pass. Decrease Stencil Value In The Shadow
	glFrontFace( GL_CW );
	glStencilOp( GL_KEEP, GL_KEEP, GL_DECR );
            TracerProjection( A, B);  



	glFrontFace( GL_CCW );
	glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );	// Enable Rendering To Colour Buffer For All Components

	// Draw A Shadowing Rectangle Covering The Entire Screen
        glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
	glColor4f( 1.0f, 0.5f, 1.0f, 0.4f );                    //rose
        glEnable( GL_BLEND );
	glStencilFunc( GL_NOTEQUAL, 0, 0xFFFFFFFF );
	glStencilOp( GL_KEEP, GL_KEEP, GL_KEEP );
	glPushMatrix();
	glLoadIdentity();
        glBegin( GL_TRIANGLE_STRIP );
		glVertex3f(-10.1f, 10.1f,0.2f);
		glVertex3f(-10.1f,-10.1f,0.2f);
		glVertex3f( 10.1f, 10.1f,0.2f);
		glVertex3f( 10.1f,-10.1f,0.2f);
	glEnd();
 	glPopMatrix();
        glPopAttrib();
Il me semble que ce plan doit couvrir la vu de la fenetre.
J'utilise des commandes au clavier pour bouger dans ma scène. Ce rectangle doit aussi bouger en fonction de mes commandes de manière à toujours cacher mon point de vu?