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 :

Stencil buffer en mode GL_SELECT


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut Stencil buffer en mode GL_SELECT
    Je n'arrive pas à utiliser le stencil buffer en mode GL_SELECT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      glRenderMode(GL_SELECT);
      glEnable(GL_STENCIL_TEST);
      glStencilFunc(GL_NEVER,0,0);
      glBegin(GL_POINTS);
        glVertex2f(0,0);
      glEnd();
      std::cout << "nbHits: " << glRenderMode(GL_RENDER) << '\n';
    Le code ci-dessus affiche "nbHits: 1" alors que je m'attends à "nbHits: 0".

    Où est le problème ?

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Citation Envoyé par boromir73
    Je n'arrive pas à utiliser le stencil buffer en mode GL_SELECT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      glRenderMode(GL_SELECT);
      glEnable(GL_STENCIL_TEST);
      glStencilFunc(GL_NEVER,0,0);
      glBegin(GL_POINTS);
        glVertex2f(0,0);
      glEnd();
      std::cout << "nbHits: " << glRenderMode(GL_RENDER) << '\n';
    Le code ci-dessus affiche "nbHits: 1" alors que je m'attends à "nbHits: 0".

    Où est le problème ?
    Ce n'est pas comme cela que fonctionne le mode select. Il y a déjà eu des questions sur cela dans le forum. Tu devrais trouver tes réponses en faisant une recherche.

    Jc

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Je ne vois toujours pas ce qui ne va pas avec mon code précédent ; ce code est incomplet car je n'ai pas écrit l'appel à glSelectBuffer() avant glRenderMode(), mais cela ne change rien au problème.

    Voici un exemple un peu plus complet :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    void test() {
      const int W = 800, H = 600;
    
      const GLsizei SELECT_BUFFER_SIZE = 512;
      GLuint selectBuffer[SELECT_BUFFER_SIZE];
    
      glViewport(0,0,W,H);
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      glOrtho(0,W,0,H,-1,1);
    
      GLint viewport[4];
      GLfloat proj[16];
      glGetIntegerv(GL_VIEWPORT,viewport);
      glGetFloatv(GL_PROJECTION_MATRIX,proj);
    
      glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT);
    
      glSelectBuffer(SELECT_BUFFER_SIZE,selectBuffer);
      glRenderMode(GL_SELECT);
    
      glInitNames();
      glPushName(0);
    
      glEnable(GL_STENCIL_TEST);
      glStencilOp(GL_KEEP,GL_KEEP,GL_KEEP);
      glStencilFunc(GL_NEVER,0,0);
    
      glMatrixMode(GL_PROJECTION);
      glLoadIdentity();
      gluPickMatrix(W/2,H/2,W,H,viewport);
      glMultMatrixf(proj);
    
      glMatrixMode(GL_MODELVIEW);
      glLoadIdentity();
    
      glPointSize(10);
      glColor3f(1,1,1);
    
      glLoadName(1);
      glBegin(GL_POINTS);
        glVertex2f(W/2,H/2);
      glEnd();
    	
      glLoadName(2);
      glBegin(GL_POINTS);
        glVertex2f(W/2+20,H/2);
      glEnd();
    
      glFlush();
      SDL_GL_SwapBuffers();
    
      std::cout << "nbHits: " << glRenderMode(GL_RENDER) << '\n';
    	
      glMatrixMode( GL_PROJECTION );
      glLoadMatrixf(proj);
      glMatrixMode( GL_MODELVIEW );
    }
    J'utilise la fonction de test GL_NEVER pour le stencil buffer.

    Si je désactive l'instruction glRenderMode(GL_SELECT), rien ne s'affiche sur l'écran graphique.

    Mais si j'active cette instruction, la console affiche "nbHits: 2".

    Le stencil buffer fonctionne-t-il en mode GL_SELECT ou y a-t-il une erreur dans mon code ?

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 90
    Par défaut
    Je crois que j'ai compris : en mode GL_SELECT (et GL_FEEDBACK aussi je pense) seul le volume de clipping compte, aucun autre test n'est fait (GL_DEPTH_TEST, GL_STENCIL_TEST, etc.).

    Dommage

+ 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