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
|
gl.glClearStencil(0); // on mettra 0 partout dans le stencil buffer
gl.glClear(GL.GL_STENCIL_BUFFER_BIT); // mettre 0 partout dans le stencil buffer
gl.glEnable(GL.GL_STENCIL_TEST); // activer le stencil test
gl.glStencilFunc(GL.GL_ALWAYS,1,0xff); // test toujours vrai, valeur 1, masque 255
gl.glStencilOp(GL.GL_REPLACE,GL.GL_REPLACE,GL.GL_REPLACE); // toujours remplacer par valeur ( = 1 )
gl.glDepthMask(false); // ne pas écrire dans le depth buffer
gl.glColorMask(false,false,false,false); // ne pas écrire dans le color buffer
//ici tu dessines un quad à l'emplacement de la porte, un autre à l'emplacement de la fenetre ...
// Select Texture 1 (0)
gl.glBegin(GL.GL_QUADS);
gl.glNormal3f( 0.0f, 0.0f, 1.0f);
gl.glColor4f(0, 0, 0, 0.5f);
gl.glVertex3f(-0.3f, -0.3f, 0.3f);
gl.glVertex3f( 0.3f, -0.3f, 0.3f);
gl.glVertex3f( 0.3f, 0.3f, 0.3f);
gl.glVertex3f(-0.3f, 0.3f, 0.3f);
gl.glEnd();
gl.glColorMask(true,true,true,true); // écrire dans le color buffer
gl.glDepthMask(true); // écrire dans le depth buffer
gl.glStencilFunc(GL.GL_EQUAL,0,0xff); // test: si égal à 0
//ici tu dessines ton mur texturé, qui sera troué par tes portes et fenetres
gl.glBindTexture(GL.GL_TEXTURE_2D, SkyTexture);
gl.glBegin(GL.GL_QUADS);
gl.glNormal3f( 0.0f, 0.0f, 1.0f);
gl.glTexCoord2f(0.0f, 0.0f); gl.glVertex3f(-1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0.0f); gl.glVertex3f( 1.0f, -1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f); gl.glVertex3f( 1.0f, 1.0f, 1.0f);
gl.glTexCoord2f(0.0f, 1.0f); gl.glVertex3f(-1.0f, 1.0f, 1.0f);
gl.glEnd();
gl.glDisable(GL.GL_STENCIL_TEST); // désactiver le stencil test |