OpenGL:将glBlendFunc和glAccum结合起来

时间:2009-06-10 02:48:05

标签: opengl

我一直致力于一个做深度场的图形项目。该方法正在进行多次传递,每次传递都会使用不同的近距离和远距离剪切参数渲染场景,以便在每次传递时渲染不同的深度范围。

这个想法是通过渲染纹理并在渲染的四边形(使用纹理)上进行模糊,在每个单独的图层上应用模糊内核。这都是相当基本的东西。因为工作正常。然而,我无法工作的部分是层的组合:

在绘制每个通道之前,使用color4(0,0,0,0)清除颜色缓冲区。然而,积累似乎不允许使用glBlendFunc使得它累积考虑alpha通道(即glBlendFunc(GL_SRC_ALPHA,GL_SRC_ONE_MINUS_ALPHA))。

问题是:    - glBlendFunc会影响glAccum吗?    - 如果没有,我该如何解决这个问题?

根据文档,这似乎并非如此,因为没有提及,但感觉这是一个非常有用的功能。

此致 [R

1 个答案:

答案 0 :(得分:0)

你的问题没有解释为什么你需要混合和累积,所以这个答案可能不是真正有用。 accum缓冲区不会混合。但是有两条路线可能有用:

  1. 大多数现代硬件可以进行“分离”混合,因此您可以在Alpha通道上进行添加操作,同时在帧缓冲区上进行实际混合。

  2. 许多现代设置可让您同时渲染到多个绘制缓冲区,有时使用单独的混合模式。

  3. 因此,您可以通过FBO使用第二个帧缓冲作为“伪累积缓冲区”,使用混合模式“累积”。如果你能找到一个足够接近你想要的累积操作的混合模式,你可以利用混合方程式。

    看看这些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