2011-09-16 89 views
1

由於深度緩衝區像素只能具有0到255的顏色(對不對?),所以最大繪製距離也會受到該邊界的限制。OpenGL深度緩衝區最大距離

  • 這是真的嗎?
  • 現代遊戲如何解決這個問題?
  • 值之間呢?像125.5一樣?
+0

爲了防止您對這個主題的閱讀僅涵蓋Z和W緩衝區,還有對數Z緩衝區,它具有更好的覆蓋範圍,儘管它不作爲固定功能支持(您必須在着色器中實現它)。 http://www.gamasutra.com/blogs/BranoKemen/20090812/2725/Logarithmic_Depth_Buffer.php – Robinson

回答

4
  • 沒有它的不對。由於其提供的有限範圍,通常甚至不可能使用8位深度緩衝區。最小值通常是16位,24位(保存模板緩衝區的前8位32位)是最常見的。它也可以使用浮點深度緩衝區和32位整數緩衝區。
  • 通過使用更大的深度。
  • 在125.5這樣的值的情況下,它實際上會被舍入或截斷爲126或125.但是,通常通過OpenGL,您實際上會將1和-1之間的深度值(投影后和w分割)傳遞給OpenGL 。然後將該值發送到OpenGL運行時間,將其轉換爲實際的深度值。通過這種方式,您可以更改深度緩衝區的位深度,並且所有內容都可以繼續工作。
+0

一個小附錄:也可以在OpenGL 3.x卡上使用32位整數深度緩衝區。 –

+0

@Nicol Bolas:你說得很對。編輯。我傾向於忽略32位int緩衝區,因爲雖然FP緩衝區只有24位精度,但添加的動態範圍要比具有32位IMO的有用得多:) – Goz

0

想要顯示巨大景觀的遊戲通常使用天空盒/天空,即。一個平坦的形象,給人以偉大的印象。

我記得公會的主菜單。它看起來很大,但你仔細觀察,它確實是一個圓形的紋理。

深度緩衝區像素用於確保未繪製比現有對象渲染得更遠的對象。如果兩個物體具有相同的深度,他們可以選擇是否渲染它,無論哪種方式都很好,你不會尋找這麼高的精度。