OpenglES - 透明纹理遮挡背后的物体

6

我有一些带透明度贴图的四边形和一些位于这些四边形后面的物体,但是它们似乎没有显示出来。我知道这与GL_BLEND有关,但我无法使后面的物体显示出来。

我尝试过:

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

但仍然不起作用。我基本上有:

// I paint the object
draw_ac3d_file([actualObject getCurrentObject3d]);

// I paint the quad
paintQuadWithAlphaTexture();
1个回答

6
有两种常见情况会导致这种情况发生,如果有的话,很难确定你的程序是在做哪一个。 绘制顺序 首先,请确保您按正确的顺序绘制对象。您必须从后向前绘制,否则模型将无法正确混合。 http://www.opengl.org/wiki/Transparency_Sorting 注意:正如Arne Bergene Fossaa指出的那样,从性能角度考虑,前向后渲染不透明对象是正确的方式。因此,大多数渲染器首先从前到后绘制所有没有透明度的模型,然后再回来从后到前渲染所有具有透明度的模型。这在大多数3D图形文本中都有涉及。 光照 第二个最常见的问题是使用光照不当。通常,在这种情况下,如果您使用的是固定功能管线,则人们会建议您简单地调用glDisable(GL_LIGHTING); 现在这样做应该可以解决问题(如果它是原因的话),但是如果您需要光照怎么办?那么您就需要使用自定义着色器或为模型设置适当的材质设置。
有关使用材质属性的讨论,请参见http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=285889

嗯,是的,我可能在从前往后绘制...谢谢。 - Marc Guirao Majo
太好了,它起作用了!我记得过去遇到过这个问题,完全让人沮丧。 - ssell
只需知道,从前到后是性能方面在所有非透明物上进行事情的正确方式。但是,在任何非透明物上首先从前到后进行,然后在所有透明物上从后到前进行也可以工作。 - Arne Bergene Fossaa
这是一个我无意中遗漏的重要事实。我会更新答案并加入这个内容。 - ssell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接