在复杂场景中渲染半透明对象

时间:2013-04-05 10:43:39

标签: opengl rendering translucency scenegraph

所以我遇到了关于场景图和半透明物体的以下问题......我的问题是我想在一个场景中渲染多个半透明物体。我知道我必须首先渲染不透明物体,然后从后到前渲染半透明物体。这很好......或多或少...

但真正的问题是我例如有一个半透明的立方体,白色(或任何其他颜色)并且具有例如0.5的α值。立方体的内部结构在波前obj文件中给出,因此给出了立方体的单个平面的顺序。我不订购对象的单个平面,因为在每个对象具有> 1000个对象和> 1000个顶点的场景中这将是太多,所以我只对整个对象进行排序。如果我渲染物体的单个平面并四处移动,那么当一个比另一个更接近的平面在另一个平面之前渲染时,就会出现这种情况。然后第二个没有被渲染,因为深度缓冲区不允许这样做,这是渲染中的错误。

关闭深度缓冲区不是解决方案:我需要它,因为可能存在半透明和不透明的复杂对象。

任何提示如何实现对象,即使它们是复杂的,不透明和半透明的,都以正确的方式呈现?

1 个答案:

答案 0 :(得分:3)

基本上你必须做以下事情:

  • 将所有内容分为不透明和半透明(如果一个对象包含两个你必须撕掉它)

  • 清除深度缓冲区

  • 启用深度测试并绘制所有不透明的内容。

  • 使深度缓冲区只读: glDepthMask(GL_FALSE)

  • 将一切都半透明地拉回到前面。

这应该可以解决问题。