gpt4 book ai didi

c++ - 无法使 mask 与 OpenGL 一起正常工作

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:07 25 4
gpt4 key购买 nike

我正在尝试使用 OpenGL 遮盖图像,以便它的一部分是透明的。这是我的代码,它不起作用:

draw_img(background);

...

glEnable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glBlendFunc(GL_ONE, GL_ZERO);
draw_img(mask);
glBlendFunc(GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA);

draw_img(foreground);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

这是我的背景图片,我正在尝试在其上绘制:

background image

这里分别是贴图和蒙版(蒙版中的白色真的很透明,我只是把它压平了所以你可以看到):

texture mask

这是我期望得到的:

expected result

这是我实际得到的:

actual result

知道可能是什么问题吗?

最佳答案

首先,我认为这不会达到您的预期:

glBlendFunc(GL_ONE, GL_ZERO);
draw_img(mask);

这是将 mask 与背景混合,但您说的是“始终采用 100% 的 mask ,始终采用 0% 的目标”。在这一步之后,帧缓冲区中将不再有红色像素,因为您已经用 mask 纹理替换了帧缓冲区的所有 channel 。

我猜你可能打算只替换 alpha channel ,而让颜色保持不变?如果在绘制 mask 之前 mask 颜色 channel ,则可以使用 glColorMask(GL_FALSE,GL_FALSE,GL_FALSE, GL_TRUE);

我认为如果您这样做可能会奏效。

我认为这种效果通常可以通过 glTexEnv 的多纹理操作来完成,但如果您不想使用多纹理,这应该可行。

关于c++ - 无法使 mask 与 OpenGL 一起正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10400651/

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