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 :

Mes polygones clignottent


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut Mes polygones clignottent
    Bonjour,

    Une petite question brève : comment faire pour que deux polygones transparents et superposés ne clignottent pas?

    Merci de votre aide.

  2. #2
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par BlaX
    Bonjour,

    Une petite question brève : comment faire pour que deux polygones transparents et superposés ne clignottent pas?

    Merci de votre aide.
    Si on avait une suite d'image qui montrait le style de clignottement cela aiderait à comprendre la source du problème, ou comme d'habitude un code minimal, compilable qui illustre le problème...

    Jc

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    Re,

    Je pensais que c'était un problème classique. Voici un bout de code qui correspond à mon problème, je ne peux pas envoyer l'appli :

    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
     
    	// Mes polygones seront transparents
    	glColor4f (1.f, 1.f, 1.f, 0.1f);
    	// Premier polygone
    	glBegin (GL_QUADS);
    	glVertex3f ( 1.f, -1.f,  0.f);
    	glVertex3f ( 1.f,  1.f,  0.f);
    	glVertex3f (-1.f,  1.f,  0.f);
    	glVertex3f (-1.f, -1.f,  0.f);
    	glEnd ();
    	// Je bouge un tout petit peu avant de tracer le second polygone
     	glTranslatef (0.001f, 0.f, 0.f);
    	// Second polygone
    	glBegin (GL_QUADS);
    	glVertex3f ( 1.f, -1.f,  0.f);
    	glVertex3f ( 1.f,  1.f,  0.f);
    	glVertex3f (-1.f,  1.f,  0.f);
    	glVertex3f (-1.f, -1.f,  0.f);
    	glEnd ();
    J'obtiens un rendu plus ou moins haché (cela dépend de l'angle de vue). En gros, un coup j'ai le second derrière le premier, un coup c'est l'inverse. Comme j'utilise de l'alpha, un coup j'ai une luminosité de 10%, un coup une luminosité de 20%.

    Quand je dis "un coup... un coup...", je veux parler au niveau pixel.

    Je n'arrive pas à être plus clair.

    Concrètement, ça fait du canal+ crypté, quoi.

    Si je retire le translate (qui fait glisser les deux polygones l'un contre l'autre dans ce bout de code), voici ce qui se passe :
    - si mon glDepthFunc est à GL_LEQUAL, j'ai mes 2 polygones et donc une intensité lumineuse de 20%,
    - si mon glDepthFunc est à GL_LESS, je n'ai plus que le premier polygone (puisque le deuxieme se fait jeter) et donc une intensité lumineuse de 10%.

    Merci,

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    J'ai oublié de dire que si je parlais du glDepthFunc à la fin, en virant le glTranslatef, c'est pasque c'est le comportement normal.

    En rajoutant le glTranslatef, j'ajoute certainement une imprécision dans le calcul, qui fait que les deux polygnes ne sont plus exactement superposés. C'est ce problème que j'aimerai résoudre.

  5. #5
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Et avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glDisable(GL_DEPTH_TEST);
    à placer avant l'affichage du second quad ?

  6. #6
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    probleme de Zfighting...
    normalement, pour limiter ce probleme, il faut :
    ne pas mettre le glTranslate
    utiliser une glDepthFunc(GL_LEQUAL)
    utiliser le bon mode de blending (additif,soustractif, ca depend de ce que tu souhaite faire
    http://jeux.developpez.com/faq/3d/?p..._alphablending

    et c'est effectivement un probleme classique...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  7. #7
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    juste pour vérifier, tu es bien en double buffer ???
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2005
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 23
    Points : 23
    Points
    23
    Par défaut
    ToTo13 > Oui, je suis bien en double buffering...

    Bafman > Merci pour ta réponse. Le "Zfighting" semble effectivement être le problème auquel je suis confronté. J'ai attentivement lu ton mini-tutorial sur le blending, mais il ne m'apporte pas de solution.

    J'avais "réduit" le problème à ces deux rectangles, mais il est un peu plus global en réalité: je génère un nuage de particules (des quads texturés, en billboard), que je trie du plus loin au plus proche pour le blending. Je ne peux pas me débarasser du glTranslate (et c'est même pire puisque j'ai des glRotate par billboard). Et je ne peux pas empecher mes billboards d'être parfois coplanaires, et du coup de se "Zfighter".

    Il existe une solution?

  9. #9
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Vérifier que tes billboards sont coplanaires, et dans ce cas la -> décalage ou séparation.

    Sinon avant l'affichage du nuage
    glDisable(GL_DEPTH_TEST);

    Ensuite tu l'actives de nouveau.

    [EDIT]
    Il n'y aura plus de Zfighting, par contre, faut afficher le nuage de l'arrière vers l'avant.
    [/EDIT]

  10. #10
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par BlaX
    je génère un nuage de particules (des quads texturés, en billboard), que je trie du plus loin au plus proche pour le blending
    Prise de tête.
    Tu désactive le test de profondeur et c'est bon aussi.

    2 idées:
    1 - Vive glFlush(), et si tu as l'impression que ton appli lag, utilise glFinish()
    2 - J'ai eu des problèmes une fois avec le scintillement aussi... La source était la synchronisation verticale. Comme je l'avais désactivée, j'avais un nombre de FPS trop grand et certains polygones scintillaient. En le désactivant tout était normal.

    Sinon j'ai pas beaucoup d'autres idées
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

Discussions similaires

  1. Réponses: 9
    Dernier message: 24/05/2003, 11h25
  2. [Algo] Point à l'intérieur d'un polygone ?
    Par kebby dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/05/2003, 14h22
  3. une ligne et un polygone convexe
    Par rekam dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 20/12/2002, 11h39
  4. que deviennent mes accents ?!
    Par petitdns dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 28/11/2002, 10h32
  5. Stocker mes données
    Par Le Fou dans le forum C++Builder
    Réponses: 23
    Dernier message: 05/07/2002, 16h02

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