我需要一些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解决方案:
答案 0 :(得分:4)
也许这就是你想要的:
1)清除目标图像:
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
2)绘制背景,遮住alpha通道:
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
3)绘制“遮罩叠加层”,遮蔽颜色通道:
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
4)绘制前景,启用混合:
glEnable(GL_BLEND);
glBlendEquationSeparate(GL_FUNC_ADD, GL_FUNC_ADD);
glBlendFuncSeparate(GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA, GL_ONE, GL_ZERO);
注意:叠加图像必须指定Alpha通道。