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
|
glEnable(GL_LIGHTING);
glDisable(GL_LIGHT0); //On désactive la lampe.
//On trace la scène
glVertexPointer(3,GL_FLOAT,0,object1);
glDrawArrays(GL_TRIANGLES,0,taille1/3);
glVertexPointer(3,GL_FLOAT,0,object2);
glDrawArrays(GL_QUADS,0,taille2/3);
glEnable(GL_STENCIL_TEST);
glDisable(GL_DEPTH_TEST);
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE);
glStencilFunc(GL_ALWAYS, 0x0, 0xffffffff);
/*glStencilOpSeparate(GL_FRONT, GL_KEEP, GL_KEEP, GL_INCR);
glStencilOpSeparate(GL_BACK, GL_KEEP, GL_KEEP, GL_DECR);*/
glEnable(GL_CULL_FACE);
glStencilOp(GL_KEEP,GL_KEEP,GL_INCR);
glFrontFace(GL_CW);
glVertexPointer(3,GL_FLOAT,0,shape);
glDrawArrays(GL_QUADS,0,shape_vertex_count);
glStencilOp(GL_KEEP,GL_KEEP,GL_DECR);
glFrontFace(GL_CCW);
glDrawArrays(GL_QUADS,0,shape_vertex_count);
glDisable(GL_CULL_FACE);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
glEnable(GL_DEPTH_TEST);
glStencilFunc(GL_EQUAL, 0, 0xffffffff);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glEnable(GL_LIGHT0);
glVertexPointer(3,GL_FLOAT,0,object1);
glDrawArrays(GL_TRIANGLES,0,taille1/3);
glVertexPointer(3,GL_FLOAT,0,object2);
glDrawArrays(GL_QUADS,0,taille2/3);
glDisable(GL_STENCIL_TEST);
glEnable(GL_DEPTH_TEST); |