Miroir en OpenGL : besoin d'aide - C++ - Programmation
Marsh Posté le 16-04-2011 à 20:40:58
Un petit up, pour ajouter qu'en fin de compte j'ai également un autre problème (ahlala...) : le "reflet" d'un objet (en fait son image inversée) apparaît des deux côtés du miroir ! Autrement dit, d'un côté du miroir le tout est normal (à part les objets derrière qui sont également affichés), de l'autre côté on observe également le reflet de l'objet derrière le miroir !
Marsh Posté le 21-05-2011 à 23:17:33
Là aussi il y a un bon tutorial sur nehe.gamedev.net.
D'un autre coté, en reprenant le code et remplaçant chaque ligne par son action en français (pseudo code, algorithme ...), permet de trouver la source des erreurs.
Et ca a aussi l'avantage d'obliger à comprendre ce que fait chaque ligne, en particulier ce que fait le test stencil.
Marsh Posté le 16-04-2011 à 15:31:24
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.