2

我正在使用以下内容来启用 alpha 混合

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

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

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

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

阿尔法混合出错

我究竟做错了什么?

4

1 回答 1

1

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

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

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

于 2013-11-06T11:18:35.777 回答