OpenglES - 透明纹理阻挡对象后面

时间:2011-09-01 13:11:32

标签: objective-c opengl-es blend

我有一些带有透明度纹理的四边形和这些四边形后面的一些对象。但是,这些似乎没有显示出来。我知道这是关于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 个答案:

答案 0 :(得分:6)

有两种常见情况会造成这种情况,如果有的话,很难分辨出你的程序正在做什么。

绘制订单

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

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

Arne Bergene Fossaa指出,从背景到背面是从表演角度渲染透明的物体的正确方法。

注意因此,大多数渲染器首先绘制所有前后都没有透明度的模型,然后返回并渲染所有具有透明性的模型从前到后。这在大多数3D图形文本中都有涉及。

后端到前

enter image description here

前到后的

enter image description here

图片来自RMIT大学的Geoff Leach

<强>照明

第二个最常见的问题是照明使用不当。通常在这种情况下,如果您使用固定功能管道,人们会建议您只需拨打glDisable(GL_LIGHTING);

现在这个应该工作(如果它是原因)但是如果你想要照明怎么办?然后,您必须使用自定义着色器或为模型设置适当的材质设置。

有关使用材料属性的讨论,请访问http://www.opengl.org/discussion_boards/ubbthreads.php?ubb=showflat&Number=285889