您应该使用glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
。另一个在这种情况下完全不尊重alpha通道,它将简单地总结源和目标颜色。
有一点你应该注意。这对颜色很有用,但你的目的地alpha通道不正确。在大多数情况下,您不使用它,但是如果您希望从alpha通道的缓冲区中提取图像,您将需要它,同样可以使用FBO并重复使用具有透明度的纹理。在这种情况下,您应该使用glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE)
分别绘制Alpha通道。这意味着双倍的绘制调用(至少我不能想到没有着色器的更好的解决方案)。提请颜色只有你有设置glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE)
并提请阿尔法只使用glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE)
综上所述:
glEnable(GL_BLEND);
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//draw the scene
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_TRUE);
glBlendFunc(GL_ONE_MINUS_DST_ALPHA, GL_ONE);
//draw the scene
glDisable(GL_ALPHA_TEST);
glDisable(GL_BLEND);