我的场景中有两个对象,一个矩形和一个圆形。
矩形在z轴上为1个单位,圆在z轴上为0个单位。
矩形的不透明度为50,圆的不透明度为100
即使圆的不透明度为100,为什么矩形的alpha也会减小圆的alpha。
这是我正在使用的混合模式。
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
答案 0 :(得分:1)
可能的解释是,矩形比圆形“暗”。
通过设置Alpha混合时
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
那么最终颜色的公式是
color_dest = color_dest * (1-alpha_source) + color_source * alpha_source
让我们假设圆圈的颜色为1.0。圆的Alpha通道也为1.0。首先绘制圆。目标缓冲区的内容为黑色(0、0、0、0)。
绘制圆后,将应用混合:
color_dest = color_dest * (1-alpha_source) + color_source * alpha_source
(1, 1, 1, 1) = (0, 0, 0, 0) * (1 - 1.0) + (1, 1, 1, 1) * 1.0
矩形的颜色为0.5,alpha通道也为0.5。再次应用混合:
color_dest = color_dest * (1-alpha_source) + color_source * alpha_source
(0.75, 0.75, 0.75, 0.75) = (1, 1, 1, 1) * (1 - 0.5) + (0.5, 0.5, 0.5, 0.5) * 0.5
因此,矩形覆盖圆的片段的最终颜色为(0.75,0.75,0.75,0.75)。 “较暗”的矩形使圆圈变暗。
答案 1 :(得分:1)
如果您想要不同的RGB颜色方程式和不同的Alpha方程,则可以使用。
glBlendFuncSeparate(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_SRC_ALPHA, GL_ONE);