我有一些带有透明度纹理的四边形和这些四边形后面的一些对象。但是,这些似乎没有显示出来。我知道这是关于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();
答案 0 :(得分:6)
有两种常见情况会造成这种情况,如果有的话,很难分辨出你的程序正在做什么。
绘制订单
首先,确保以正确的顺序绘制对象。您必须从从前到后进行绘制,否则模型将无法正确混合。
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