Z-Buffer 和 W-Buffer

來源:互聯網
上載者:User
Depth-Buffer(深度緩衝)有兩種:Z-Buffer 和 W-Buffer,這裡討論這兩種深度緩衝的區別,以及如何在兩者之間轉換。

w 的含義

3D空間點的座標是(x,y,z),為了使矩陣乘法具有平移變換的功效,我們用4D空間中的點(x,y,z,w)來表示3D空間中的點(x',y',z'),這兩個不同空間點之間的關係是:

    x' = x / w    y' = y / w    z' = z / w

像這樣用四維空間點表示三維空間點,或者說用 n + 1 維空間點表示 n 維空間點的方法叫做 “齊次座標標記法”。

實際使用中,在模型->世界轉換、世界->視圖轉換過程中,w 通常保持不變,總是等於一,這樣,齊次座標的前三個分量就是對應3D空間點的三個座標分量。但是,經過投影變換後,w 將得到一個比例值,比如,一般的透視投影變換矩陣是:

 

    | W   0   0   0 |    | 0   H   0   0 |    | 0   0   Q   1 |    | 0   0  -QZn 0 |    其中   Zn  =  近裁剪面 z 座標           Zf  =  遠裁剪面 z 座標            W  =  2 * Zn / 視口寬度            H  =  2 * Zn / 視口高度            Q  =  Zf / (Zf - Zn)

將點(x,y,z,1)乘以此矩陣,w 便不再是一,而對應的3D空間點座標(x / w,y / w,z / w)將出現一個縮放效果。同時,因為 w 的值通常與 z 座標成正比(比如經過上面這個矩陣的變換,w 的值其實就是 z 座標的值),所以經過投影變換,物體會產生近大遠小的效果。

Z-Buffer 與 W-Buffer 的區別

簡單的說,z-buffer 與 w-buffer 的區別就是前者儲存的是點的 z 座標,而後者儲存的是點的 w 座標。

具體的說,兩者因為儲存的值有不同的含義,所以表現出來的實際效果也會有差別。

z-buffer 儲存的是經過投影變換後的 z 座標,前面說過,投影后物體會產生近大遠小的效果,所以距離眼睛比較近的地方,z 座標的解析度比較大,而遠處的解析度則比較小,換句話說,投影后的 z 座標在其範圍上,對於離開眼睛的物理距離變化來說,不是線性變化的(即非均勻分布),這樣的一個好處是近處的物體得到了較高的深度解析度,但是遠處物體的深度判斷可能會出錯。

w-buffer 儲存的是經過投影變換後的 w 座標,而 w 座標通常跟全局座標系中的 z 座標成正比,所以變換到投影空間中之後,其值依然是線性分布的,這樣無論遠處還是近處的物體,都有相同的深度解析度,這是它的優點,當然,缺點就是不能用較高的深度解析度來表現近處的物體。

從硬體實現角度來說,幾乎所有的硬體3D加速卡都支援 z-buffer,而 w-buffer 的支援沒有 z-buffer 那麼廣泛。另外,早期的 Direct3D 版本看起來也不支援 w-buffer。

Z-Buffer 與 W-Buffer 之間的轉換

根據上面的矩陣變換,可以很容易的匯出將 w-buffer 轉換成 z-buffer 的公式:

    zDepth = Q * ( wDepth - Zn ) / wDepth           = Zf / ( Zf - Zn ) * ( wDepth - Zn ) / wDepth

這個轉換公式有什麼用處?舉個例子:3DS MAX 使用的是 w-buffer,如果從 3DS MAX 中匯出深度資訊到 Direct3D 中,作為預渲染的背景使用,就有可能用到上面這個轉換。當然,如果在 D3D 中使用 w-buffer,問題就不大了,但是如果使用 z-buffer,不經過這樣的轉換,渲染結果就會出錯。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.