Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c语言中的多边形深度排序#_C#_Sorting_Opentk_Depth Testing - Fatal编程技术网

C# c语言中的多边形深度排序#

C# c语言中的多边形深度排序#,c#,sorting,opentk,depth-testing,C#,Sorting,Opentk,Depth Testing,我正在用c#编写一个游戏,使用opengl即时模式渲染。很多时候,由于排序不正确,透明多边形无法正确显示。我已经搜索了很多,但找不到关于如何快速进行深度排序的教程。我尝试的方法是使用List.sort从相机计算每个透明三角形的深度,但速度非常慢(每秒帧数,而不是每秒帧数) 有没有标准的深度排序方法? 有没有关于c#如何做的好教程? 有没有快速的方法可以做到这一点?半透明多边形的顺序无关渲染可能是最痛苦的效果之一,要以通用的方式正确处理。这就是为什么人们使用各种技巧,在速度和质量之间进行不同的权衡

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

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

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

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

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

    参考资料: