透明纹理阻挡对象后面

我有一些四边形的纹理具有透明度,这些四边形背后有一些物体。 但是,这些似乎并没有显示出来。 我知道这是关于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();

有两种常见的情况会造成这种情况,并且很难确定您的程序正在执行哪一个操作(如果有的话)。

绘制顺序

首先,确保你以正确的顺序绘制你的对象。 您必须从前到抽取,否则模型将无法正确混合。

http://www.opengl.org/wiki/Transparency_Sorting

请注意 Arne Bergene Fossaa指出,从性能角度来看,从前到后是渲染不透明的对象的正确方法。 因此,大多数渲染器首先绘制所有没有透明度的模型,然后返回并渲染具有透明度的所有模型。 这在大多数3D图形文本中都有介绍。

后端到前端

在这里输入图像描述

从前到后

在这里输入图像描述

RMIT大学Geoff Leach的图像学分

灯光

第二个最常见的问题是照明使用不当。 通常在这种情况下,如果你使用的是固定功能流水线,人们会建议你简单地调用glDisable(GL_LIGHTING);

现在,这应该工作(如果它是所有原因),但如果你想照明? 然后,您将不得不使用自定义着色器或为模型设置适当的材质设置。

关于使用材料属性的讨论可以在http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=285889找到。

链接地址: http://www.djcxy.com/p/34003.html

上一篇: Transparent texture blocking objects behind

下一篇: Transparent png texture in cocos2d using opengl iphone