我正在使用以下功能启用Alpha混合
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
使用最简单的片段着色器,透明度取自似乎有效的纹理:
void main(void) {
gl_FragColor = texture2D(texture, texCoordOut);
}
虽然它与背景颜色很好地融合,但它不能与使用相同alpha混合的其他对象一起使用。我真的不知道怎么解释这个,所以这是一张图片:
我做错了什么?
答案 0 :(得分:1)
您的代码没有错。我的猜测可能是你绘制每个图像的顺序有所不同。例如,如果你按照以下顺序绘制图像BGImage,image1,image2等等。
opengl做的是,它需要您的绘制调用顺序来混合图像。在framebuffer中绘制BGImage后,它会混合image1和framebuffer,然后在framebuffer中再次绘制结果。然后它混合了image2和framebuffer,然后在framebuffer中再次绘制结果,依此类推。
因此,如果image1与image2重叠,则image1与BGimage混合而不是与image2混合。