Salut à tous,
Je débute en OpenGL et je cherche à créer une scène avec un miroir. J'ai utilisé pour cela le Stencil, mais je suis confronté à un problème : mon miroir affiche bien le reflet de l'objet devant lui ,mais également l'objet derrière le miroir.
Voilà une partie de mon code :
glutInitDisplayMode(GLUT_STENCIL);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
// Je dessine la scène "normale"
glEnable(GL_DEPTH_TEST);
glDisable(GL_STENCIL_TEST);
scene.render();
glDepthMask(GL_FALSE);
// Je désactive l'écriture dans le color buffer
glColorMask(false, false, false, false);
// J'active le stencil et je dessine le miroir (un disque)
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
gluDisk(gluNewQuadric(), 0, 2.0, 60, 60);
glStencilFunc(GL_EQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
// Plan de clipping pour n'afficher que les reflets de devant et pas ceux de derrière
glEnable(GL_CLIP_PLANE0);
GLdouble eqn[4];
eqn[0] = 0; eqn[1] = 0; eqn[2] = -1; eqn[3] = 0;
glClipPlane(GL_CLIP_PLANE0, eqn);
glColorMask(true, true, true, true);
glDepthMask(GL_TRUE);
// Pour que les reflets soient transparents
glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);
// Dessiner objets inversés
// Inverse par rapport au plan Z = 0
glScalef(1.0,1.0,-1.0);
scene.render();
glDisable(GL_CLIP_PLANE0);
glDisable(GL_STENCIL_TEST);
glBlendFunc(GL_SRC_ALPHA ,GL_ONE_MINUS_SRC_ALPHA);
Voilà donc en gros le problème est que je n'arrive pas à ne pas afficher les objets derrière le miroir. Je peine pas mal dessus depuis quelques jours donc si vous pouviez m'aider je vous en serais très reconnaissant .
Merci d'avance.