2015-03-08 2 views
0

J'ai une texture OpenGL transparente qui a des formes simples dessinées par OpenGL: cercles, polygones, lignes. Ils sont dessinés sans anti-aliasing, multi-échantillonnage, etc. Par conséquent, ils ont des frontières jaggy.OpenGL Anti-aliasing des formes sur la texture après sa création

Je n'ai pas accès au processus de création de texture, donc je ne peux pas activer le multi-échantillonnage . Existe-t-il un moyen de rendre ces dessins lisses APRÈS avoir terminé?

Répondre

2

Il existe des filtres anti-alias basés sur l'image tels que FXAA et MLAA qui fonctionneront dans cette situation. J'hésite à les appeler anti-alias parce qu'ils n'évitent pas vraiment l'aliasing, ils le cachent juste après le fait. Ils s'apparentent plus à des filtres de flou intelligents. Je sais par votre autre question que vous ne voulez pas utiliser les FBO, ce qui me porte à croire que vous utilisez une base de code OpenGL 2.1 ou plus ancienne. FXAA peut être implémenté en GLSL 1.20, mais il fonctionne mieux en 1.30 (GL 3.0). La seule chose que je ne connais pas est l'utilisation de FXAA sur une image qui inclut la transparence, elle s'attend à ce que la luminance soit encodée dans le canal alpha (ou sRGB, ce qui n'est pas une fonctionnalité GL 2.1).

Vous ne voudrez probablement pas appliquer FXAA à votre texture directement, plutôt vous auriez besoin de dessiner dans un PBuffer et d'appliquer FXAA après vous mélangez votre texture d'entrée.

+0

Oui, ils ne sont pas AA, mais ce terme est juste utilisé pour expliquer ce dont j'ai besoin :) Je peux utiliser FBO mais pas sur le processus qui est fait avant que la texture est créée. Donc, si ça aide le post-traitement, c'est bon. Donc, si j'ai une telle texture dans FBO, comment pourrais-je appliquer FXAA sur elle? –