1

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

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

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

任何提示我如何才能实现对象,即使它们很复杂并且既不透明又半透明,以正确的方式呈现?

4

1 回答 1

3

基本上你必须做到以下几点:

  • 将所有东西分成不透明和半透明(如果一个对象由两者组成,则必须将其撕开)

  • 清除深度缓冲区

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

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

  • 把所有半透明的东西都画到前面。

这应该够了吧。

于 2013-04-05T11:09:24.050 回答