【问题标题】:opengl es 2.0 alpha blendingopengl es 2.0 alpha 混合
【发布时间】:2013-11-16 22:16:51
【问题描述】:

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

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

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

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

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

我做错了什么?

【问题讨论】:

  • 能否添加代码来说明如何渲染每个精灵/对象以及如何加载纹理?

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


【解决方案1】:

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

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

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

【讨论】:

  • 为这些图像关闭 GL_DEPTH_TEST 有效,但在其他情况下会产生问题。由于两个图像的深度相同,我将 glDepthFunc 更改为 GL_LEQUAL,这似乎工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-08
  • 2013-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 2011-12-14
相关资源
最近更新 更多