我试图用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);
这是我的背景图片,我试图绘制:
这里分别是纹理和面具(面具中的白色真的是透明的,我只是将它弄平,所以你可以看到):
这是我期望得到的:
这就是我实际得到的:
知道可能是什么问题吗?
答案 0 :(得分:4)
首先,我不认为这会做你期望的事情:
glBlendFunc(GL_ONE, GL_ZERO);
draw_img(mask);
这是将蒙版与背景混合,但你说的是“总是占用100%的面具,总是占据目标的0%”。在此步骤之后,帧缓冲区中将不再有红色像素,因为您已使用蒙版纹理替换了所有帧缓冲区的通道。
我猜你可能打算只更换alpha通道,并保持颜色不变?如果在使用glColorMask(GL_FALSE,GL_FALSE,GL_FALSE, GL_TRUE);
我认为如果你这样做可能会有用。
我认为这种效果通常可以通过glTexEnv进行多重纹理操作来完成,但是如果你不想使用多重纹理这应该可以工作。