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 :

Utilisation du stencil buffer


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut Utilisation du stencil buffer
    Bonjour,
    Je veux dessiner un trou (une ouverture)dans un quad. J'ai utilisé le stencil buffer pour:
    1) dessiner un premier petit quad qui va servir du trou.
    2) dessiner un deuxième grand quad qui va servir du quad troué.
    Ces deux quads ont le même Z donc ils sont situés dans le même plan.
    J'ai utilisé le code java suivant :
    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
    38
    39
    40
    41
    42
    43
     
    //Disable color and depth buffers
          gl.glColorMask(false, false, false, false);             //Disable writting in color buffer
          gl.glDepthMask(false);                                  //Disable writting in depth buffer
     
          gl.glEnable(GL.GL_STENCIL_TEST);                        //Enable Stencil test
          gl.glStencilFunc(GL.GL_ALWAYS, 1, 1);                   //Test always success, value written 1
          gl.glStencilOp(GL.GL_REPLACE, GL.GL_REPLACE, GL.GL_REPLACE);  //Stencil & Depth test passes => replace existing value
     
     
           gl.glBegin(GL.GL_QUADS);
           gl.glNormal3f( 0.0f, 0.0f, 1.0f);
           //gl.glColor3f(0, 0, 0);
           gl.glVertex3f(-0.5f, -0.5f,  1.0f);
           gl.glVertex3f( 0.5f, -0.5f,  1.0f);
           gl.glVertex3f( 0.5f,  0.5f,  1.0f);
           gl.glVertex3f(-0.5f,  0.5f,  1.0f);
           gl.glEnd();
     
        gl.glDepthMask(true);
        gl.glColorMask(true, true, true, true); //Enable drawing of r, g, b & a
     
     
     
        gl.glStencilFunc(GL.GL_EQUAL, 1, 1);                   //Draw only where stencil buffer is 1
        gl.glStencilOp(GL.GL_KEEP, GL.GL_KEEP, GL.GL_KEEP);    //Stencil buffer read only
     
          gl.glPushMatrix();
           gl.glScalef(1.0f, -1.0f, 1.0f);                        //Mirror Y
           gl.glEnable(GL.GL_LIGHTING);
         //gl.glLightfv(GL.GL_LIGHT0, GL.GL_POSITION, lightPos);
     
           gl.glBegin(GL.GL_QUADS);
           gl.glNormal3f( 0.0f, 0.0f, 1.0f);
           gl.glVertex3f(-1.0f, -1.0f,  1.0f);
           gl.glVertex3f( 1.0f, -1.0f,  1.0f);
           gl.glVertex3f( 1.0f,  1.0f,  1.0f);
           gl.glVertex3f(-1.0f,  1.0f,  1.0f);
           gl.glEnd();
           gl.glDisable(GL.GL_LIGHTING);
           gl.glPopMatrix();
     
           gl.glDisable(GL.GL_STENCIL_TEST);                        //Disable Stencil test
    Mais j'obtiend pas une ouverture dans le grand quad. Quel est le problème SVP? C'est urgent

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Je crois que ce code est appliquée pour JOGL 1.1. Et moi je travaille avec JSR 231.
    Est ce que quelqu'un a un exemple pour JSR231?

  3. #3
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2005
    Messages : 249
    Par défaut
    Il me semble (mais je ne suis pas sûr) qu'il faut désactiver GL_DEPTH_TEST avant de faire une opération dans le stencil buffer. Tu le réactives juste après.

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    J'ai testé ce code en utilisant deux triangles ayant une partie commune. En appliquant ce code, j'obtient uniquement la partie d'intersection des deux triangles. Donc, ce code ne garde que les parties communes des objets qui s'intersectent. Quels paramètres à changer pour qu'il garde les objets et effaces les zones d'intersection.

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gl.glStencilFunc(GL.GL_EQUAL, 1, 1); //Draw only where stencil buffer is 1
    Là tu autorises le rendu uniquement là où le stencil est à un, càd uniquement dans le masque affiché précédemment ; ce qui est bien l'intersection. Si tu veux exclure ce masque il faut faire l'inverse : autoriser le rendu partout où il n'y a pas 1 dans le stencil (il doit y avoir un opérateur GL.GL_NOTEQUAL).

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    465
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 465
    Par défaut
    Merci bien Laurent , maintenant ça marche parfaitement.
    @+ pour d'autres questions.

+ 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: 18/03/2005, 23h42
  2. stencil buffer
    Par graphicsxp dans le forum OpenGL
    Réponses: 2
    Dernier message: 13/12/2004, 13h21
  3. mask in stencil buffer
    Par graphicsxp dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/12/2004, 11h17
  4. Probleme Stencil Buffer
    Par supergrey dans le forum DirectX
    Réponses: 14
    Dernier message: 20/07/2004, 20h54
  5. stencil buffer
    Par patapetz dans le forum OpenGL
    Réponses: 6
    Dernier message: 26/02/2004, 17h23

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