2014-06-22 60 views
2

我正在用c#編寫一個遊戲,使用opengl立即模式渲染。很多時候,由於帶來錯誤排序,透明多邊形無法正確顯示。我一直在尋找很多,但找不到如何快速進行深度排序的教程。我嘗試使用List.sort計算每個透明三角形的深度,但這非常慢(每秒鐘的秒數,而不是每秒的幀數)c中的多邊形深度排序#

是否有標準的深度排序方法? 有沒有什麼好的教程C#上如何做到這一點? 有沒有一個快速的方法來做到這一點?

回答

1

半透明多邊形的順序無關渲染可能是以通用方式獲得最令人痛苦的效果之一。這就是爲什麼人們使用不同的速度和質量之間的折衷方法。最簡單的方法是簡單地渲染幾何圖形:

  1. 渲染所有不透明的幾何圖形。
  2. 禁用深度寫入GL.DepthMask(false)並呈現您的半透明幾何。

這樣,你的半透明多邊形將深度考驗對不透明多邊形,但不會修改深度緩衝(即他們不會深度測試對其他半透明的多邊形。)

這是簡單,快速並避免排序多邊形的必要性。缺點是它只適用於使用加性或乘性混合(所謂的「交換」混合模式)的半透明效果。對於其他混合效果,您必須對半透明多邊形進行排序,或者使用諸如深度剝離等技術。

參考文獻:

  1. http://www.openglsuperbible.com/2013/08/20/is-order-independent-transparency-really-necessary/
  2. https://gamedev.stackexchange.com/questions/43635/what-is-the-order-less-rendering-technique-that-allows-partial-transparency
  3. https://developer.nvidia.com/content/interactive-order-independent-transparency
  4. http://developer.download.nvidia.com/SDK/10/opengl/src/dual_depth_peeling/doc/DualDepthPeeling.pdf