Bonjour,
Une petite question brève : comment faire pour que deux polygones transparents et superposés ne clignottent pas?
Merci de votre aide.
Version imprimable
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...Citation:
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:
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: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...
Bonjour,
juste pour vérifier, tu es bien en double buffer ???
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.Citation:
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 :calim2: