閱讀英文

共用方式為


深度緩衝區 (Direct3D 9)

深度緩衝區,通常稱為 z 緩衝區或 w-buffer,是儲存 Direct3D 所要使用的深度資訊之裝置的屬性。 當 Direct3D 將場景呈現至目標表面時,它可以使用相關聯深度緩衝區表面中的記憶體作為工作區,以判斷點陣化多邊形圖元如何彼此遮蔽。 Direct3D 使用螢幕外 Direct3D 表面做為寫入最終色彩值的目標。 與轉譯目標表面相關聯的深度緩衝區表面可用來儲存深度資訊,告知 Direct3D 每個可見圖元在場景中有多深。

當場景點陣化時,已啟用深度緩衝處理,則會測試轉譯介面上的每個點。 深度緩衝區中的值可以是點的 z 座標或其同質 w 座標 - 從投影空間中的點 (x,y,z,w) 位置。 使用 z 值的深度緩衝區通常稱為 z 緩衝區,而使用 w 值的深度緩衝區稱為 w-buffer。 每種深度緩衝區都有優點和缺點,稍後會加以討論。

在測試開始時,深度緩衝區中的深度值會設定為場景的最大可能值。 轉譯介面上的色彩值會設定為背景色彩值或該點背景紋理的色彩值。 場景中的每個多邊形都會經過測試,以查看它是否與轉譯介面上的目前座標 (x,y) 交集。 如果這樣做,深度值會是 z 緩衝區中的 z 座標,以及 w-buffer 中的 w 座標-在目前點進行測試,以查看其是否小於儲存在深度緩衝區中的深度值。 如果多邊形值的深度較小,則會儲存在深度緩衝區中,而且多邊形中的色彩值會寫入轉譯介面上的目前點。 如果該點的多邊形深度值較大,就會測試清單中的下一個多邊形。 下圖顯示此程式。

測試深度值的 圖表

注意

雖然大部分的應用程式都未使用這項功能,但您可以變更 Direct3D 用來判斷哪些值放在深度緩衝區中,以及後續轉譯目標表面的比較。 若要這樣做,請變更D3DRS_ZFUNC轉譯狀態的值。 在某些硬體上,變更比較函式可能會停用階層式 z 測試。

 

市場上幾乎所有的加速器都支援 z 緩衝處理,讓 z 緩衝區成為現今最常見的深度緩衝區類型。 不過,z 緩衝區無處不在,其缺點是。 由於涉及數學,z 緩衝區中產生的 z 值往往不會平均分散到 z 緩衝區範圍(通常為 0.0 到 1.0,包含)。 具體來說,遠近裁剪平面之間的比率會強烈影響 Z 值分佈不平均的方式。 使用遠平面距離與近平面距離比例為 100,90% 的深度緩衝範圍會花費在場景深度範圍的前 10%。 使用外部場景進行娛樂或視覺仿真的典型應用程式,通常需要介於 1,000 到 10,000 之間的遠平面/近平面比率。 以 1,000 的比例,98% 的範圍花費在深度範圍的前 2%, 分佈變得更糟, 比率較高。 這可能會導致遠距對象的隱藏表面成品,特別是在使用16位深度緩衝區時,最常支援的位深度。

另一方面,W 型深度緩衝區通常比 z 緩衝區更平均地分佈於近遠剪輯平面之間。 主要優點是遠近裁剪平面的距離比率不再是問題。 這可讓應用程式支援較大的最大範圍,同時仍然在接近眼點時獲得相對精確的深度緩衝。 W 型深度緩衝區並不完美,有時可能會針對接近對象呈現隱藏的表面成品。 w 緩衝方法的另一個缺點與硬體支持有關:w 緩衝處理在硬體中不受廣泛支援,如同 z 緩衝處理。

使用 z 緩衝區需要在轉譯期間造成額外負荷。 使用 z 緩衝區時,可以使用各種技術來優化轉譯。 如需詳細資訊,請參閱 Z-Buffer Performance

注意

深度值的實際解譯是轉譯器特有的。

 

本節提供使用深度緩衝區進行隱藏線條和隱藏表面移除的相關信息。

Direct3D 轉譯