glEnable GL_LINE_SMOOTH;
glEnable GL_BLEND;
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA;
glHint GL_LINE_SMOOTH_HINT GL_NICEST;
qui vont bien. Sur fond noir, les lignes rendent nickel. Maintenant si je met un rectangle bleu derrière, l'anti aliasing continue à se faire vers du noir et non vers du bleu.
Est-ce normal (je suppose que oui) ?
Et comment fait-on pour avoir un bon rendu quel que soit le fond ?
Merci forum.
(Note: c'est écrit en Ocaml, c'est pour ça qu'il n'y a ni parenthèses ni virgules)
# de memoire
Posté par NeoX . Évalué à 0.
il y en a surement des methodes à appliquer et quelques options pour preciser ou prendre le fond pour l'antialias.
[^] # Re: de memoire
Posté par Obi MO (site web personnel) . Évalué à 1.
J'ai bien trouvé GL_CULL_FACE pour ne pas dessiner les faces cachées, mais en fait ça ne m'intéresse pas (je fais de la 2D). Je continue à chercher alors ...
[^] # Re: de memoire
Posté par Obi MO (site web personnel) . Évalué à 1.
[^] # Re: de memoire
Posté par Obi MO (site web personnel) . Évalué à 1.
# re:
Posté par Meku (site web personnel) . Évalué à 2.
Tu as un exemple de couleur de ligne avec lequel tu as cet effet ? Ou éventuellement poster une capture d'écran.
J'ai essayé une ligne blanche et une verte sur un triangle bleu (affiché sur un fond noir) et l'antialiasing est correct sur les deux surfaces.
Aussi, quelle épaisseur de ligne utilises-tu ? (glLineWidth) Il est conseillé d'augmenter l'épaisseur de ligne lorsque l'antialising est activé, par exemple à au moins 1,5 lorsque l'épaisseur originelle de la ligne est à 1,0.
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 1.
http://farm2.static.flickr.com/1320/1364676845_d55da56ae2_o.(...)
L'init du code incriminé est là
http://www.flickr.com/photos/15812694@N00/1364676845/
J'ai un glLinewidth entre 2 et 4 suivant les lignes.
J'ai découpé le rendering en 2 phases, d'abord les lignes, puis les remplissages. Dans ce cas, les lignes sensées être recouvertes par des fills ne le sont pas (ex sur la capture les L allongés figurant les ailes de l'avion ont un z plus proche que la ligne d'horizon, pourtant cette dernière passe devant la forme, mais bien derrière son contour.)
Si j'inverse l'ordre de dessin, les lignes ne sont pas dessinées alors qu'elles ont un z plus proche (!). Toujours en ordre de dessin inversé, si je supprime les remplissages, je vois les lignes, mais si je rends les remplissages partiellement transparents, je ne vois pas les lignes derrière.
J'ai inversé tous les z, je n'ai aucun changement dans ce qui est affiché.
Si je mets tous les z à 0 et que je fais les appels dans le bon ordre (les lignes puis les remplissages) la géométrie passe bien (le choses qui doivent se cacher se cachent), mais j'ai toujours le même problème d'anti alias.
Je pense que je n'ai pas tout compris au depth buffer ...
[^] # Re: re:
Posté par Meku (site web personnel) . Évalué à 2.
Mais je me demandais pourquoi tu traces les contours avec des lignes puis effectues un remplissage ? pourquoi ne pas tracer directement tes symboles en tant que ligne uniquement, en jouant sur leur épaisseur ? (ça fait peut être partie de ton cahier des charges ?)
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 1.
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 2.
http://www.flickr.com/photos/15812694@N00/1367027345/
Beaucoup mieux donc, mais les lignes ne sont pas de la bonne couleur (phénomène d'écran évoqué plus haut). Je continue à chercher ...
[^] # Re: re:
Posté par Meku (site web personnel) . Évalué à 1.
glBlendFunc GL_SRC_ALPHA GL_DST_ALPHA;
Le second paramètre est incorrect, il doit être GL_ONE_MINUS_SRC_ALPHA comme indiqué dans ton message initial.
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 1.
Merci pour tout en tous cas ;)
[^] # Re: re:
Posté par Meku (site web personnel) . Évalué à 1.
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 1.
[^] # Re: re:
Posté par Meku (site web personnel) . Évalué à 1.
gluOrtho2D (-10.0, 10.0, -5.0, 5.0);
te définit un repère orthogonal allant de -10 à +10 sur l'axe des X et de -5 à +5 sur l'axe des Y (donc dans ce cas, l'origine est situé au centre de l'image).
[^] # Re: re:
Posté par Obi MO (site web personnel) . Évalué à 1.
Trouvé, mauvais paramètres en blend func, j'aurais du utiliser
glBlendFunc GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA;
pour faire l'anti aliasing comme il faut.
Super ! je vais pouvoir m'attaquer aux stencils maintenant :o/
Bonne nuit !
[^] # Re: re:
Posté par Meku (site web personnel) . Évalué à 1.
http://tfc.duke.free.fr/tmp/aa.png
Est-ce bien à peu près ce que tu cherche à obtenir ?
Dans mon programme j'ai désactivé le test de profondeur. Pour de la 2D, ce n'est pas nécessaire, il suffit de dessiner dans le bon ordre (sauf peut être pour faire des masques -- cas particuliers).
À la fin de ton bout de code, tu semble dessiner les contours d'abord puis ensuite les surfaces. Peut-être serait-il mieux d'inverser cet ordre ? (le résultat ne sera pas le même surtout si on désactive le test de profondeur)
Bon par contre il semblerait qu'il y ait un bug avec le driver intel lorsqu'on utilise GL_LINE_LOOP...
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.