opengl es 2.0 alpha混合

时间:2013-11-05 21:18:31

标签: opengl-es-2.0 alphablending visual-artifacts

我正在使用以下功能启用Alpha混合

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

使用最简单的片段着色器,透明度取自似乎有效的纹理:

void main(void) {
  gl_FragColor = texture2D(texture, texCoordOut);
}

虽然它与背景颜色很好地融合,但它不能与使用相同alpha混合的其他对象一起使用。我真的不知道怎么解释这个,所以这是一张图片:

alpha blending going wrong

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的代码没有错。我的猜测可能是你绘制每个图像的顺序有所不同。例如,如果你按照以下顺序绘制图像BGImage,image1,image2等等。

opengl做的是,它需要您的绘制调用顺序来混合图像。在framebuffer中绘制BGImage后,它会混合image1和framebuffer,然后在framebuffer中再次绘制结果。然后它混合了image2和framebuffer,然后在framebuffer中再次绘制结果,依此类推。

因此,如果image1与image2重叠,则image1与BGimage混合而不是与image2混合。