在复杂场景中渲染半透明对象
Posted
技术标签:
【中文标题】在复杂场景中渲染半透明对象【英文标题】:Rendering translucent objects in a complex scene 【发布时间】:2013-04-05 10:43:38 【问题描述】:所以我遇到以下关于场景图和半透明对象的问题......我的问题是我想在一个场景中渲染多个半透明对象。我知道我必须先渲染不透明的物体,然后从后到前渲染半透明的物体。效果很好……或多或少……
但真正的问题是,例如,我有一个半透明的立方体,白色(或任何其他颜色),alpha 值例如为 0.5。立方体的内部结构在波前 obj 文件中给出,因此给出了立方体单平面的顺序。我不订购对象的单个平面,因为在具有> 1000 个对象和每个对象的> 1000 个顶点的场景中这会太多,所以我只订购整个对象。如果我渲染对象的单个平面并四处移动,那么就会有这样一个时刻,一个比另一个更近的平面在另一个平面之前被渲染。然后第二个没有被渲染,因为深度缓冲区不允许这样做,这是渲染中的错误。
关闭深度缓冲区不是解决方案:我需要它,因为可能存在半透明和不透明的复杂对象。
任何提示我可以如何实现对象,即使它们很复杂并且既不透明又半透明,以正确的方式呈现?
【问题讨论】:
【参考方案1】:基本上你必须做到以下几点:
将所有东西分成不透明和半透明(如果一个对象由两者组成,则必须将其撕开)
清除深度缓冲区
启用深度测试并绘制不透明的所有内容。
将深度缓冲区设为只读:glDepthMask(GL_FALSE)
将所有半透明的东西都画在前面。
这应该可以解决问题。
【讨论】:
好的,但问题是,“从后到前”意味着我必须订购它。由于上述情况,此排序必须在每个三角形上。但这可能太多了。有什么办法,用着色器做吗? 不,它不能用着色器完成,因为它独立处理三角形。准确地渲染半透明物体是很难做到的。即使您对每个三角形进行排序,也可能由于三角形相交等而出现错误。您不能忍受在对象级别排序时所犯的错误吗?您必须在此处找到速度和准确性之间的折衷方案。以上是关于在复杂场景中渲染半透明对象的主要内容,如果未能解决你的问题,请参考以下文章