与OpenGL ES的条件混合

时间:2018-12-21 14:30:00

标签: c++ opengl-es opengl-es-3.0

我想使用满足以下要求的OpenGL ES 3.1来实现片段/混合操作:

  • 如果片段着色器产生的像素满足特定条件(可以在顶点着色器中最早确定),则应将其颜色值添加到帧缓冲区的像素值中。
  • 如果像素不满足条件,则颜色应完全替换帧缓冲区中的颜色。

这可以通过常规的混合功能,alpha技巧等来完成吗?

2 个答案:

答案 0 :(得分:2)

如果您在顶点着色时知道这一点,我认为整个三角形是一个混合或另一个。如果没有太多的几何图形,这对于模板测试是理想的选择。

  • 将模具清零。
  • 禁用颜色写入的绘制形状,并且将与两个混合规则之一匹配的区域的模板设置为一个。
  • 设置混合规则一。
  • 在启用模具测试的情况下绘制形状,并在模具== 0时通过。
  • 设置第二个混合规则。
  • 启用模具测试并绘制形状,当模具== 1时通过。

此成本多少取决于您的几何图形,因为您需要将其传递多次进行渲染,但是其中的模板测试部分通常接近“免费”。

答案 1 :(得分:2)

我认为您可以使用标准的预乘alpha混合:

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 

如果要替换,则从片段着色器输出一个alpha值1。如果要进行加法运算,则从片段着色器输出一个alpha值0。

假定您只对帧缓冲区中的RGB值真正感兴趣。