OpenGL深度排序

时间:2010-11-29 16:44:43

标签: sorting opengl transparency

我正在使用深度排序进行基本对象透明度。作为深度,我使用从相机到模型三角形的每个中心的距离(平方),我计算为{(x1 + x2 + x3)/ 3,(y1 + y2 + y3)/ 3,(z1 + z2 + z3)/ 3}。虽然结果差不多好,但也有一些错误。

猴子头没有排序 no sorting

排序 sorting

我可以对这些错误做些什么吗?

3 个答案:

答案 0 :(得分:6)

无法以完美的方式对三角形进行排序。请查看opengl.org wiki上Transparency Sorting文章末尾的示例。

@kos: 请查看Order Independent Transparency with Dual Depth PeelingAlpha to Coverage

答案 1 :(得分:2)

除非你有屏幕对齐的粒子,否则排序任意三角形真的很困难。为了获得完美的结果,您必须开始分割三角形。

正如@tibur所说,你可以通过一些简单的近似来逃避,但order-independent transparency(OIT)也是一个不错的解决方案。但它确实需要OpenGL 3时代的图形功能。我有implementation available on github,它显示了一些使完全 OIT非常快的方法。

值得一看" adaptive transparency"," multi-layer alpha blending"和" hybrid transparency"。这些是快速近似解决方案,但对于常见场景给出了非常好的结果。


一些类似的问题......

答案 2 :(得分:0)

从数学角度讲,如果你对身体有所了解,它可以帮助分类。

例如,立方体的面可以仅通过重心(面心)进行深度分类。如果方形面A的中心将比B的中心更近,则B将永远不会在A的前面有任何部分(同样,对于立方体。)

事实上,对于凸体,可以仅通过方向对面进行分类。