如何在OpenGL中以类似photoshop的屏幕模式混合像素?

时间:2011-05-18 09:43:25

标签: opengl

我知道glBlendFunc是指定像素混合模式的函数调用。

我可以在Photoshop中执行 Multiply Mode ,其公式为

C = A * B

其中A是源像素,B是目标像素,C是最终结果。

使用 glBlendFunc(GL_DST_COLOR,GL_ZERO)我会得到这种效果。

现在我的问题是如何使用 Screen Mode ?它的公式是:

C = 1 - (1 - A) * (1 - B)

1 个答案:

答案 0 :(得分:7)

没有检查,但是要走的路是如下。

OpenGL的内置计算看起来像:

C = A*s + B*d

您可以选择s和d。

一些代数给了我们

C = 1 - (1 - A) * (1 - B) = 
  = 1 - (1 - B) + A*(1 - B) = 
  = A*(1 - B) + B

s = 1 - B
d = 1

我们得到了我们想要的价值。所以这应该有效:

glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ONE);