gpt4 book ai didi

objective-c - OpenGL glBlendFuncSeparate

转载 作者:搜寻专家 更新时间:2023-10-30 19:41:57 24 4
gpt4 key购买 nike

我需要一些有关 OpenGL 纹理 mask 的帮助。我让它工作但需要找到一些其他混合函数参数以其他方式工作。现在我有:

//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(用背景纹理填充),其中 mask 是透明的。我需要它对面具的颜色使用react。我的意思是根据蒙版的颜色设置前景不透明度。例如,如果蒙版为黑色 (0.0,0.0,0.0),则前景中该位置的不透明度为 0(被背景填充),如果蒙版为白色 (1.0,1.0,1.0),则前景的不透明度为 1(不填充背景)。它可以是相反的结果(白色 = 不透明度 0,黑色 = 不透明度 1)。我只需要它根据颜色工作。

我当前结果的可视化如下。


背景:
enter image description here

蒙版(圆是透明的):
enter image description here

前景:
enter image description here

结果:
enter image description here


我希望它像这样工作:

背景:
enter image description here

蒙版(圆圈为白色,背景为黑色):
enter image description here

前景:
enter image description here

结果:
enter image description here


以便以后可以这样使用:

背景:
enter image description here

蒙版(圆圈为白色,背景为黑色):
enter image description here

前景:
enter image description here

结果:
enter image description here


尝试@Gigi解决方案:
enter image description here

最佳答案

也许这就是你想要的:


1) 清除目标图像:

glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);

2) 绘制背景,遮住 alpha channel :

glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);

3) 绘制“ mask 层”,遮住颜色 channel :

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 channel 。

关于objective-c - OpenGL glBlendFuncSeparate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11543419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com