c#中的多边形深度排序

时间:2014-06-22 07:09:40

标签: c# sorting opentk depth-testing

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

有没有标准的方法来进行深度排序? 有没有关于c#如何做的好的教程? 有快速的方法吗?

1 个答案:

答案 0 :(得分:1)

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

  1. 渲染所有不透明的几何体。
  2. 禁用深度写入GL.DepthMask(false)并渲染半透明几何体。
  3. 这样,您的半透明多边形将针对不透明多边形进行深度测试,但不会修改深度缓冲区(即不会对其他半透明多边形进行深度测试。)

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

    参考文献:

    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