2009-06-10 5 views
0

J'ai travaillé sur un projet graphique en Profondeur de champ. La méthode effectue plusieurs passes, chacune rendant la scène avec différents paramètres d'écrêtage proche et lointain, de sorte qu'elle restitue différentes plages de profondeur à chaque passage.OpenGL: Combiner glBlendFunc avec glAccum

L'idée est d'appliquer un noyau de flou sur chaque calque individuel en le rendant à une texture et en effectuant le flou sur un quadrillé rendu (avec la texture). Ce sont des choses assez basiques. Comme fonctionne bien. Cependant, la partie que je ne peux pas travailler est la combinaison des couches:

Le tampon de couleur est effacé avec color4 (0,0,0,0) avant que chaque passe soit dessinée. Cependant, l'accumulation ne semble pas permettre l'utilisation de glBlendFunc de telle sorte qu'elle s'accumule en prenant en compte le canal alpha (c'est-à-dire glBlendFunc (GL_SRC_ALPHA, GL_SRC_ONE_MINUS_ALPHA)).

La question est alors: - Est-ce que le glBlendFunc affecte le glAccum? - Si non, comment puis-je contourner ce problème? Basé sur la documentation, cela ne semble pas être le cas car il n'est pas mentionné, mais il pense que c'est une fonctionnalité très utile.

Cordialement, R

Répondre

0

Votre question n'explique pas pourquoi vous avez besoin de mélange et accum, cette réponse peut ne pas être réelle utile. Le tampon accum ne se mélange pas. Mais il y a deux voies qui pourraient être utiles:

  1. La plupart du matériel moderne peut faire de mélange « séparé », vous pouvez donc, par exemple, faire une opération d'additif sur le canal alpha tout en faisant le mélange réel sur le framebuffer.

  2. De nombreuses configurations modernes vous permettent de rendre simultanément plusieurs tampons de dessin, parfois avec des modes de fusion distincts.

Vous pourriez être en mesure d'utiliser un second framebuffer via un OIR comme une sorte de « faux tampon accum », en utilisant un mode de fusion « accumuler ». Si vous pouvez trouver un mode de fusion assez proche de l'opération d'accumulation que vous voulez, vous pourriez profiter de l'équation de mélange.

Jetez un oeil à ces extensions GL:

http://www.opengl.org/registry/specs/ARB/draw_buffers.txt

http://www.opengl.org/registry/specs/ARB/draw_buffers_blend.txt

http://www.opengl.org/registry/specs/EXT/draw_buffers2.txt