2

我正在用 c# 编写游戏,使用 opengl 即时模式渲染。很多时候,透明多边形由于排序不正确而无法正确显示。我一直在搜索,但找不到有关如何快速进行深度排序的教程。我的尝试方法是使用 List.sort 从相机计算每个透明三角形的深度,但这非常慢(每帧秒数,而不是每秒帧数)

有没有标准的深度排序方法?有没有关于如何做到这一点的 c# 好的教程?有没有快速的方法呢?

4

1 回答 1

1

半透明多边形的与顺序无关的渲染可能是以通用方式正确处理的最痛苦的效果之一。这就是为什么人们使用各种技巧在速度和质量之间进行不同的权衡。最简单的方法是在两遍中简单地渲染您的几何图形:

  1. 渲染所有不透明的几何体。
  2. 禁用深度写入GL.DepthMask(false)并渲染半透明几何体。

这样,您的半透明多边形将针对不透明多边形进行深度测试,但不会修改深度缓冲区(即它们不会针对其他半透明多边形进行深度测试。)

这简单、快速并且避免了对多边形进行排序的必要性。缺点是它仅适用于使用加法或乘法混合(所谓的“交换”混合模式)的半透明效果。对于其他混合效果,您要么必须对半透明多边形进行排序,要么使用深度剥离等技术。

参考:

  1. http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/
  2. https://gamedev.stackexchange.com/questions/43635/what-is-the-order-less-rendering-technique-that-allows-partial-transparency
  3. https://developer.nvidia.com/content/interactive-order-independent-transparency
  4. http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf
于 2014-06-23T06:30:45.380 回答