【发布时间】:2012-07-17 14:37:25
【问题描述】:
我需要一些有关 OpenGL 纹理遮罩的帮助。我让它工作,但需要找到一些其他混合函数参数以其他方式工作。 现在我有:
//Background
...code...
glBlendFunc(GL_ONE, GL_ZERO);
...code
//Mask
...code...
glBlendFuncSeparate(GL_ZERO, GL_ONE, GL_DST_COLOR, GL_ZERO);
...code...
//Foreground
...code
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);
...code
现在它将前景的不透明度设置为 0(用背景纹理填充),其中蒙版是透明的。我需要它对面具的颜色做出反应。我的意思是根据蒙版的颜色设置前景不透明度。例如,如果蒙版是黑色 (0.0,0.0,0.0),则前景中该位置的不透明度为 0(填充背景),如果蒙版为白色(1.0,1.0,1.0),则前景的不透明度为 1(未填充背景)。它可以是相反的结果(白色 = 不透明度 0,黑色 = 不透明度 1)。我只需要它根据颜色工作。
我当前结果的可视化如下。
背景:
面具(圆圈是透明的):
前台:
结果:
我希望它像这样工作:
背景:
面具(圆圈为白色,背景为黑色):
前台:
结果:
以便以后可以这样使用:
背景:
面具(圆圈为白色,背景为黑色):
前台:
结果:
尝试使用@Gigi 解决方案:
【问题讨论】:
-
你能添加一个“预期”的结果图像吗?
-
你考虑过使用像素着色器吗?
-
是的,就像@ananthonline 所说,如果像素着色器是一个选项,那么这个解决方案会相当简单
-
实际上我不知道如何设置像素着色器并使用它们,这就是我使用混合的原因。它看起来更容易
标签: objective-c xcode macos cocoa opengl