【问题标题】:OpenGL: Combining glBlendFunc with glAccumOpenGL:将 glBlendFunc 与 glAccum 结合使用
【发布时间】:2010-11-01 16:31:55
【问题描述】:

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

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

在每次绘制之前,使用 color4(0,0,0,0) 清除颜色缓冲区。但是,累积似乎不允许使用 glBlendFunc 以便累积考虑 alpha 通道(即 glBlendFunc(GL_SRC_ALPHA, GL_SRC_ONE_MINUS_ALPHA))。

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

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

问候, 回复

【问题讨论】:

    标签: opengl


    【解决方案1】:

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

    1. 大多数现代硬件都可以进行“分离”混合,例如,您可以在 Alpha 通道上进行加法运算,同时在帧缓冲区上进行真正的混合。

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

    因此,您可以通过 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 2010-09-16
      相关资源
      最近更新 更多