OpenGL深度排序

10

我正在使用深度排序进行基本物体透明效果。我使用距离(平方)作为深度值,计算方法是从相机到模型三角形中心的距离,计算公式为{(x1+x2+x3)/3, (y1+y2+y3)/3, (z1+z2+z3)/3}。虽然结果几乎正确,但仍存在一些错误。

未经过排序的猴头 未排序

经过排序 排序

对于这些错误,我能做些什么吗?


1
固定功能还是可编程管线? - genpfault
我创建了一个距离数组,然后对其进行排序,并在索引数组中交换相应的值,最后使用glDrawElements函数。 - spacevillain
3个回答

6

那么,仍然没有一种单一的解决方案可以正确地呈现任意透明度吗? - Kos
1
@Kos:请查看http://www.yakiimo3d.com/2010/07/19/dx11-order-independent-transparency/和http://blog.icare3d.org/2010/07/opengl-40-abuffer-v20-linked-lists-of.html。 - elmattic

3
除非您有屏幕对齐的粒子,否则排序任意三角形真的很困难。为了获得完美的结果,您必须开始分割三角形。 正如@tibur所说,您可以使用一些简单的近似方法,但无序透明度(OIT)也是一个不错的解决方案。但是,它需要OpenGL 3时代的图形特性。我在github上有一个实现可用, 这展示了一些使精确OIT非常快的方法。 值得一看“自适应透明度”,“多层alpha混合”和“混合透明度”。这些都是快速的近似解决方案,但对于常见场景给出非常好的结果。

一些类似的问题...


0

从数学角度来说,如果你知道某个物体的一些信息,它可以帮助排序。

例如,立方体的面可以仅通过重心(面中心)进行深度排序。如果正方形面 A 的中心比 B 的中心更靠近,B 将永远没有任何部分在 A 的前面(同样适用于立方体)。

事实上,对于凸体而言,面可以仅通过定向进行排序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接