2015-04-16 69 views
2

在混合中,我們首先繪製不透明的對象,並啓用z-write和測試。然後,我們禁用z-write並啓用測試以繪製半透明對象。在繪製半透明物體時,我們將它們繪製回前面的順序,爲什麼我們需要禁用寫入z-buffer?爲什麼我們在混合中禁用Z寫入

回答

2

因爲如果你不這樣做,它們可能會阻礙其他半透明對象,這些對象將在稍後被繪製到場景中,甚至是同一對象的某些部分。你把它們拉回前面的事實並不意味着障礙不能發生。

如果您要繪製一個具有某種內部結構的對象,那麼如果首先渲染外部曲面,則不會渲染該對象。類似的事情可能發生在凹形物體上。此外,前後訂購併不總是很容易構建,尤其是在場景中存在交叉或交織對象的情況下

+0

你能舉個例子來支持你的觀點嗎? – debonair

+0

@Pavel Beliy:我在你的回答中添加了你的評論。 –

0

如果嚴格按照前面的方式進行渲染,則不需要禁用深度寫入。我能想到的有幾個原因,爲什麼你還是可以將其禁用:

  1. 的排序是不是真的完美。雖然無論哪種方式都會得到錯誤的渲染結果,但直觀地說明,混合錯誤的順序會導致不那麼明顯的僞影,而不會完全消除幾何圖形。因此,禁用深度寫入將最有可能減少不完美排序的錯誤。在一般情況下完美排序並不重要,甚至可能需要分割多邊形。有關難度的更多詳情,請參閱我的答案:Some questions about OpenGL transparency

  2. 避免深度寫入可以提高效率。我有點懷疑這將是非常重要的。但總的來說,避免做不必要的工作總是一個好主意。而且由於在這種情況下編寫深度絕對不是需要,您不妨跳過它。

相關問題