GL_DEPTH_TEST和openGL中的alpha混合有什么冲突吗?

时间:2011-08-16 01:41:57

标签: opengl alphablending

我正在画一些“2D”图片。 让我们说,背景中的图片A首先绘制,前景中的图片B比A晚绘制。 B中有一些透明区域。 所以当我启用GL_DEPTH_TEST时,B应该覆盖A但是那些透明区域。

我到这里的实际结果很奇怪,B确实覆盖了A,但透明区域显示的是背景而不是A应该是。

我用了 glFrustum为GL_PROJECTION, glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA), glDepthFunc(GL_LEQUAL) 是否有一些我缺少的设置或什么?

1 个答案:

答案 0 :(得分:3)

不应该有任何你讨论的冲突。深度缓冲区每个像素只能容纳一个深度,因此透明度可能是一个问题,因为说每个像素由单个深度的数据组成并不准确。

净效果是,如果你绘制部分透明的东西,然后尝试在它后面画一些东西,深度缓冲区说不要绘制。因此,虽然你应该能够看到背后的东西,但你不能。

在您的情况下,如果您正在绘制B(在前景中)然后绘制A(在背景中),那么您所看到的将是预期的行为。您的代码的某些方面是否可能为您提供意外的绘图顺序?

相关问题