使深度緩衝區只讀的用法是什麼?我讀過紅皮書,你需要首先繪製不透明物體,然後是透明物體。我已經測試過了,並且還測試了兩個不透明的對象,結果很難解釋,並且我沒有發現使它成爲只讀的有用的東西。有人能解釋一下嗎?使深度緩衝區只讀
Q
使深度緩衝區只讀
6
A
回答
7
這在某些情況下絕對有意義。這裏有兩個:
您可能會使用非常昂貴的像素着色器爲您的圖形。如果你這樣做,你想最大限度地減少需要陰影的像素數量。爲此,您可以先將場景渲染到深度緩衝區(禁止寫入顏色緩衝區)。然後,將深度緩衝區設置爲只讀,並將所有幾何體的顏色寫入啓用並將深度比較模式設置爲相等。這可以確保屏幕上的每個像素都被精確繪製一次,並且您仍然可以使用昂貴的像素着色器,同時仍保持良好的幀速率。
透明度問題:如果渲染透明(alpha-blended)三角形,則繪製順序會對最終圖像產生重大影響。爲了獲得好看的結果,嘗試和可信的方式是首先渲染所有不透明的幾何圖形。然後禁用寫入深度緩衝區並渲染所有透明的東西從後到前排序。這將確保您的透明多邊形總是按順序繪製,並且不會干擾不透明的東西。
試想一下這種情況:
相機是在街頭場景,你是在尋找一個窗口,裏面鋪了一些不錯的東西的商店。
您首先繪製透明窗口 - 啓用深度寫入。
然後你畫車間的內部..由於Z緩衝所有像素將被丟棄,因爲顯卡認爲像素不可見。
最終會出現一個完全錯誤的圖像:在...開始前的一個窗口...以及在開始渲染之前在您的圖形內存中的任何內容。
如上所述:爲了解決這個問題,首先將所有不透明的東西(商店內部)渲染爲深度測試和深度。然後,渲染窗口並進行深度測試並深度寫入。這將解決這個問題。
下面是一個這樣的事情是多麼醜陋的例子。它顯示了另一種處理透明度錯誤的方式(仔細觀察地毯)。
相關問題
- 1. 將深度渲染緩衝區複製到深度緩衝區
- 2. 深度緩衝區只顯示藍色
- 3. OpenGL ES深度緩衝區
- 4. 傳遞深度緩衝區
- 5. OpenGL深度緩衝區
- 6. 對數深度緩衝區
- 7. 如何快速讀取OpenGL顏色緩衝區和深度緩衝區?
- 8. opengl深度測試如何使用24位深度緩衝區?
- 9. OpenGL:渲染緩衝區,深度緩衝區
- 10. 在OpenGL中查看深度緩衝區
- 11. OpenGL顏色深度緩衝區
- 12. Opengl深度緩衝區和剔除
- 13. 可視化深度緩衝區
- 14. 是深度緩衝區強制性
- 15. OpenGL深度緩衝區問題
- 16. SceneKit金屬深度緩衝區
- 17. OpenGL深度緩衝區溢出
- 18. 深度緩衝區的絕對距離
- 19. VTK:可視化深度緩衝區
- 20. 深度緩衝區未正確渲染
- 21. 如何禁用深度緩衝區?
- 22. Android上的OpenGL深度緩衝區
- 23. 如何寫入OpenGL深度緩衝區
- 24. OpenGL中的深度緩衝區
- 25. OpenGL深度緩衝區不適用
- 26. 無法設置深度緩衝區?
- 27. SlimDX 11深度緩衝區問題
- 28. Vulkan深度緩衝區位置重構
- 29. 2D中的深度緩衝區
- 30. 從QGLPixelBuffer獲取深度緩衝區
感謝您的回答,對於關閉深度緩衝區的兩種場景都是健全的。 – pooya 2010-08-08 10:54:52
在第二種情況下,關閉深度緩衝區不會改變任何東西,因爲您仍然對多邊形進行排序。 – Calvin1602 2010-08-08 17:57:13
@calvin我知道。我試圖找到一張照片,顯示我正在談論的這個alpha-bugs,這張圖片是我發現的最好的(雖然不是正確的)..我甚至在我認爲的文字中這樣說過 – 2010-08-08 18:37:41