2010-11-29 118 views
8

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

猴子头不排序 no sorting

与排序 sorting

有什么我可以做这些错误?

+1

固定功能或可编程流水线? – genpfault 2010-11-29 17:32:32

+0

已修复。我做了距离数组,然后对它进行排序并在索引数组中交换相应的值,最后在glDrawElements中交换。 – spacevillain 2010-11-30 22:02:03

回答

2

除非你有屏幕排列的粒子,分拣任意三角形真的是相当困难的。要获得完美的结果,您必须开始分割三角形。

由于@tibur说,你可以逃脱一些简单的近似,但order-independent transparency(OIT)是一个体面的解决办法了。但它确实需要OpenGL 3时代的图形功能。我有一个implementation available on github,它显示了一些方法可以使OIT相当快地完成确切的 OIT。

值得看看“adaptive transparency”,“multi-layer alpha blending”和“hybrid transparency”。这些都是快速近似的解决方案,但对于常见场景会有很好的效果


一些类似的问题...

0

从数学上来说,如果你知道一些关于身体它可以帮助排序。

例如立方体的面可以由深度单独重心(面中心)进行分类。如果方脸A的中心比B的中心更近,则B将永远不会有A前面的任何部分(再次,对于立方体)。

事实上,对于凸体,脸可以是仅按方向排序。