IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Bug Shadow Volume, stencil buffer


Sujet :

OpenGL

  1. #1
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut Bug Shadow Volume, stencil buffer
    Salut à tous,


    Pour mon petit moteur 3D j'ai implémenté un système de shadow volume. Tout fonctionnait bien jusqu'a ce que je me rends compte que lorsque j'ai une superposition d'objets donc des ombres, j'obtiens un bug : l'ombre du premier objet annule l'ombre du second et ainsi de de suite pour un ensemble d'objets superposés. Ce n'est pas évident à expliquer donc voici une petite image histoire de voir ca en couleur :


    Voilà donc, sur l'image on peut voir plusieurs objets et la façon dont comment réagissent les ombres entre elles.
    Vue la nature du problème je pense que le bug vient d'un bug d'incrémentation du stencil buffer. J'ai donc cherché de ce coté là, mais sans succès, et je dois dire qu'a force de chercher je me suis un peu embrouillé sur le fonctionnement du stencil entre le glStencilFunc et le glStencilOp. Une vision extérieurs et sein de toute embrouille pourra peut être trouver l'embrouille.
    Je vous poste donc aussi la partie du code correspondant au stencil buffer (méthode en une passe plus courte, la méthode en 2 passes donne le même résultat )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
     
     
    void RxShadowVolume::DrawOnePass()
    {
     
    			glClear(GL_STENCIL_BUFFER_BIT);
    			glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); //désactive l'écriture du tampon chromatique
    			glDepthFunc(GL_LESS);
    			glDepthMask(GL_FALSE);  // désactive l'écriture du tampon de profondeur
     
    			glEnable(GL_POLYGON_OFFSET_FILL);
    			glPolygonOffset(polyoffset.x, polyoffset.y);
     
     
    			glStencilFunc(GL_ALWAYS, 0xff, 0xff);
    			glStencilOpSeparate(GL_FRONT,GL_KEEP,GL_INCR_WRAP,GL_KEEP);
    			glStencilOpSeparate(GL_BACK,GL_KEEP,GL_DECR_WRAP,GL_KEEP);
    			glEnable(GL_STENCIL_TEST);
     
    				DrawVolumes(); //dessine les faces arrières des volumes d'ombre
     
    			//on désactive les options qui ne sont plus utile
    			glDisable(GL_POLYGON_OFFSET_FILL); 
    			//glDisable(GL_CULL_FACE);
     
    			//on réactive les tampons chromatique et de profondeur
    			glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
    			glDepthMask(GL_TRUE);
     
    			//on dessine les ombres en fonction du stencil tampon
    			glStencilFunc(GL_NOTEQUAL, 0, 0xff);
    			glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
    			DrawShadows();  //mask chromatique recouvrant l'ensemble de la scène
    			glDisable(GL_STENCIL_TEST);
     
    }
    Voilà donc si quelqu'un trouve le pourquoi du comment de mon bug, je veux bien une petite explication.

  2. #2
    Membre éprouvé Avatar de Robxley
    Homme Profil pro
    Docteur ingénieur traitement d'image
    Inscrit en
    Mai 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur ingénieur traitement d'image

    Informations forums :
    Inscription : Mai 2009
    Messages : 158
    Par défaut Trouvé !!!
    Encore moi,

    Bon après avoir longuement cherché, retourner le code dans tous les sens, j'ai enfin fini par résoudre mon problème. Et il s’avérait que le problème ne venait pas de là où je pensais qu'il était, ce fourbe.

    En faite le problème venait des meshs au format collada de mes objets que j'importais dans mon application. En effet pour le bon fonctionnement des shadows volumes il est nécessaire d'avoir des objets "volumiques" (avec une épaisseur), et mes objets exportés en collada par Sketchup, bien qu'a première vu volumiques, ne l’étaient pas réellement. En effet Sketchup exportait un mesh différent par texture différente sur l'objet, il s'en trouvais alors que des faces adjacents mais de textures différentes n'appartenaient pas au même mesh et donc les différents meshs obtenus n’étaient plus volumiques ce qui entraîna ce bug au niveau des shadows volumes.

    Voilà problème correctement identifié, puis résolue.

    Je dirais, heureux d'avoir pu m'aider

  3. #3
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Ah sympa que tu es trouvé.
    Je me suis penché un peu sur ton code et je n'avais rien vu de bizarre...
    J'ai pensé aux meshes "volumiques" qui devaient être fermé mais cela semblait le cas visuellement dans ton rendu.

    Merci du retour.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de Stencil-buffer
    Par Steki-kun dans le forum OpenGL
    Réponses: 2
    Dernier message: 19/03/2005, 00h42
  2. stencil buffer
    Par graphicsxp dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/12/2004, 14h21
  3. mask in stencil buffer
    Par graphicsxp dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/12/2004, 12h17
  4. Probleme Stencil Buffer
    Par supergrey dans le forum DirectX
    Réponses: 14
    Dernier message: 20/07/2004, 21h54
  5. stencil buffer
    Par patapetz dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/02/2004, 18h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo