2014-06-22 47 views
2

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

是否有标准的深度排序方法? 有没有什么好的教程C#上如何做到这一点? 有没有一个快速的方法来做到这一点?

回答

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