Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1750 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Miroir en OpenGL : besoin d'aide

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Miroir en OpenGL : besoin d'aide

n°2070437
Suzaku13
Posté le 16-04-2011 à 15:31:24  profilanswer
 

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  :bounce: .
 
 
                         Merci d'avance.

mood
Publicité
Posté le 16-04-2011 à 15:31:24  profilanswer
 

n°2070456
Suzaku13
Posté le 16-04-2011 à 20:40:58  profilanswer
 

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 !

n°2077508
darkstalke​r
Saturn NTSC-J, What Else ?
Posté le 21-05-2011 à 23:17:33  profilanswer
 

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.


---------------
Cyrix 5x86 120MHz, Tseng Labs ET4000/W32p VLB, Doom@45FPS <3

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Miroir en OpenGL : besoin d'aide

 

Sujets relatifs
Aide à l'optimisation de requêteaide pour script reservation d'ateliers
Lire une ligne d'un texte à l'aide d'un pointeuraide pour scroller, et conseils aussi
Besoin d'aide Php base de donnéeAide url rewriting
[OpenGL] translation ou coordonnées absolues?Aide
[aide] ACCESS, création tables (appliquée pour une gestion budget) 
Plus de sujets relatifs à : Miroir en OpenGL : besoin d'aide


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR