Bonjour,
Une petite question brève : comment faire pour que deux polygones transparents et superposés ne clignottent pas?
Merci de votre aide.
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...Envoyé par BlaX
Jc
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 :
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%.
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 ();
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,
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.
Et avec
à placer avant l'affichage du second quad ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part glDisable(GL_DEPTH_TEST);
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
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.
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?
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]
Prise de tête.Envoyé par BlaX
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager