2010-11-29 128 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前面的任何部分(再次,對於立方體)。

事實上,對於凸體,臉可以是僅按方向排序。