在混合中,我們首先繪製不透明的對象,並啓用z-write和測試。然後,我們禁用z-write並啓用測試以繪製半透明對象。在繪製半透明物體時,我們將它們繪製回前面的順序,爲什麼我們需要禁用寫入z-buffer?爲什麼我們在混合中禁用Z寫入
2
A
回答
2
因爲如果你不這樣做,它們可能會阻礙其他半透明對象,這些對象將在稍後被繪製到場景中,甚至是同一對象的某些部分。你把它們拉回前面的事實並不意味着障礙不能發生。
如果您要繪製一個具有某種內部結構的對象,那麼如果首先渲染外部曲面,則不會渲染該對象。類似的事情可能發生在凹形物體上。此外,前後訂購併不總是很容易構建,尤其是在場景中存在交叉或交織對象的情況下
0
如果嚴格按照前面的方式進行渲染,則不需要禁用深度寫入。我能想到的有幾個原因,爲什麼你還是可以將其禁用:
的排序是不是真的完美。雖然無論哪種方式都會得到錯誤的渲染結果,但直觀地說明,混合錯誤的順序會導致不那麼明顯的僞影,而不會完全消除幾何圖形。因此,禁用深度寫入將最有可能減少不完美排序的錯誤。在一般情況下完美排序並不重要,甚至可能需要分割多邊形。有關難度的更多詳情,請參閱我的答案:Some questions about OpenGL transparency。
避免深度寫入可以提高效率。我有點懷疑這將是非常重要的。但總的來說,避免做不必要的工作總是一個好主意。而且由於在這種情況下編寫深度絕對不是需要,您不妨跳過它。
相關問題
- 1. 爲什麼我們在枚舉中寫入Integer而不是int?
- 2. 爲什麼我們在openGL中默認查看負z?
- 3. 爲什麼我們應該在量角器中禁用動畫?
- 4. 爲什麼getView混合我的行?
- 5. CGLayers爲什麼不混合?
- 6. 爲什麼我們在jQuery中使用「({})」?
- 7. 爲什麼我們需要編寫log.isDebugEnabled?
- 8. 爲什麼我們不能重寫`||`和`&&`?
- 9. 爲什麼我們必須在網站應用程序中寫入robots.txt?
- 10. 爲什麼我們必須綜合?
- 11. 爲什麼我們在這個函數中寫「char * mystrcpy」?我們用什麼理由使用指針?
- 12. 爲什麼我們在iphone
- 13. 爲什麼我們在SQL
- 14. 爲什麼我們在JS
- 15. 我怎麼能寫PHP和JavaScript混合
- 16. 爲什麼人們在GLSL中寫入0.00390625而不是1.0/256.0?
- 17. 爲什麼我們必須從ProGuard混淆中排除庫?
- 18. 爲什麼我們在Swift中編寫「 - > Void」?
- 19. 我們應該在.Htaccess文件中爲第10段寫什麼?
- 20. 爲什麼我們在Swift中重寫初始值設定項?
- 21. 爲什麼我們不能在類中重寫
- 22. 爲什麼我們在最小化函數中編寫[1,1]
- 23. 爲什麼我們需要在有時啓用A20時禁用中斷?
- 24. 爲什麼我們在數組集合中沒有拼接?
- 25. 爲什麼我們不能在subprocess.Popen中結合參數?
- 26. 什麼是混合
- 27. 爲什麼我們使用Groovy中
- 28. 爲什麼我們在JavaScript中關閉?
- 29. 在python中我們稱之爲什麼?
- 30. 在ConstraintLayout中,我們在RelativeLayout中使用'app',我們使用'android'。爲什麼?
你能舉個例子來支持你的觀點嗎? – debonair
@Pavel Beliy:我在你的回答中添加了你的評論。 –