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 :

CullFace (Front / Back Face)


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut CullFace (Front / Back Face)
    Hello
    Si qqn arrive à m'expliquer le principe de fonctionnement de
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
    ainsi que glPolygonMode(GL_BACK,GL_LINE);

    Parce que j'ai réussi à faire ce que je voulais, mais c'est à mes yeux totalement à l'opposé de ce que j'ai lu dans la doc...
    D'avance merci

  2. #2
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    Salut

    glCullFace(GL_BACK)
    dit à OpenGL quelle coté des faces va être masqué. Si tu précises GL_BACK, alors seule la face avant sera dessinée.

    glEnable(GL_CULL_FACE);
    dit à OpenGL d'activer le mode culling des faces. Si ce mode est desactivé (glDisable(GL_CULL_FACE);), alors glCullFace n'aura pas d'effet.

    glPolygonMode(GL_BACK,GL_LINE);
    dit à OpenGL comment il doit afficher les faces. Le premier parametre peut être GL_FRONT (faces avant) ou GL_BACK (faces arrières) ou GL_FRONT_AND_BACK. Le second parametre peut être GL_LINE (il ne dessinera que les contours) ou GL_FILL (il remplira les faces avec la couleur/materiau/texture courante).

    Donc en gros,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
    glPolygonMode(GL_FRONT,GL_LINE);
    Il n'affichera pas les faces arrières, et dessinera simplement les contours des faces avant.

    C'était bien ça que tu voulais ?
    And still we will be here, standing like statues ...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par bigquick
    Salut

    glCullFace(GL_BACK)
    dit à OpenGL quelle coté des faces va être masqué. Si tu précises GL_BACK, alors seule la face avant sera dessinée.

    glEnable(GL_CULL_FACE);
    dit à OpenGL d'activer le mode culling des faces. Si ce mode est desactivé (glDisable(GL_CULL_FACE);), alors glCullFace n'aura pas d'effet.

    glPolygonMode(GL_BACK,GL_LINE);
    dit à OpenGL comment il doit afficher les faces. Le premier parametre peut être GL_FRONT (faces avant) ou GL_BACK (faces arrières) ou GL_FRONT_AND_BACK. Le second parametre peut être GL_LINE (il ne dessinera que les contours) ou GL_FILL (il remplira les faces avec la couleur/materiau/texture courante).

    Donc en gros,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
    glPolygonMode(GL_FRONT,GL_LINE);
    Il n'affichera pas les faces arrières, et dessinera simplement les contours des faces avant.

    C'était bien ça que tu voulais ?
    Bin si je fais ce que tu dis, je n'obtiens que les faces arrières...
    Et le pire dans tout cela, c'est que selon les combinaisons, j'arrive même à avoir les back faces ET les front edges... alors que, étant une state machine, j'ai de la peine à imaginer comment je peux avoir 2 manieres simultanement de dessiner un polygone...
    C'est vraiment bizarre.
    Et deja, pourquoi avoir defini 2 fonction. Pourquoi je peux choisir dans CullFace ET dans polygonMode ce que je veux afficher?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Points : 128
    Points
    128
    Par défaut
    A mon avis, ton problème vient de l'ordre des triangles qui n'est pas corrects. Celui-ci est très important puisque c'est celui-ci qui permet à OpenGL de déterminer le sens d'une face (FRONT ou BACK).

  5. #5
    Membre averti
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Points : 353
    Points
    353
    Par défaut
    A mon avis, ton problème vient de l'ordre des triangles qui n'est pas corrects. Celui-ci est très important puisque c'est celui-ci qui permet à OpenGL de déterminer le sens d'une face (FRONT ou BACK).
    en effet, fais attention à ca, tu dois définir ta face avant (GL_FRONT) dans le sens direct (inverse des aiguilles d'une montre).

    Pourquoi je peux choisir dans CullFace ET dans polygonMode ce que je veux afficher?
    glCullFace sert à définir la/les face(s) qui seront affichées
    glPolygonMode sert à définir comment afficher les faces affichées

    Moi je trouve ça plutôt normal d'avoir séparé les deux
    And still we will be here, standing like statues ...

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2005
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Oui, cela semble effectivement un problème avec ma manière de définir les faces. J'utilsais jusqu'a présent triangle strip (pour représenter un cube, en utilisant des triangles). mais il est impossible de faire cela tout en ayant un sens (horaire/anti-horaire) commun à tous.
    Par contre, autant je vois l'intéret de polygonMode, pour définir si on veut afficher les vertex, les edges ou la surface, autant je ne vois pas pourquoi on peut rechoisir le mode (BACK, FRONT ou les 2).

Discussions similaires

  1. Relations base front-back-mdw
    Par sash6 dans le forum Sécurité
    Réponses: 16
    Dernier message: 22/10/2009, 12h57
  2. Réponses: 9
    Dernier message: 27/06/2008, 11h14
  3. Transparence Front & Back
    Par skalimer0 dans le forum OpenGL
    Réponses: 4
    Dernier message: 22/10/2007, 16h33
  4. Opengl en C front back et ....
    Par chipryot dans le forum OpenGL
    Réponses: 2
    Dernier message: 17/02/2006, 11h05

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