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