C++ 中的 Z 緩衝區或深度緩衝區法


Z 緩衝區又稱為深度緩衝區,是一種用於隱面檢測的方法。

隱面檢測

對於任何具有透明物件和 Oberflächen的圖片。在此情況下,其他物件後面的物件是隱藏的。為了正確檢視影像,我們需要移除這些隱藏的表面。該識別稱為隱面問題

在 Z 緩衝區中,我們將沿著 Z 軸將表面作為深度進行比較。

演算法

Step 1: initialize the depth of all pixel max.
   d(i,j) = infinity
Step 2: Initialize color for all pixels.
   c(i,j) = background-color
Step 3: for each pixel in polygon projection do,
   Step 3.1: find z i.e. depth of projection’s (i,j) pixel.
   Step 3.2: if z < d(i,j) do
      Step 3.2.1 : d(i,j) = z and c(i,j) = color of polygon.

利用這種方法,我們逐個畫素查詢平面的每個畫素的深度。最小的表面決定了緩衝區的顏色。通常,所有 z 值都接近 [0,1] 的範圍。

Z=0,背面剪裁平面和 Z=1,正面剪裁平面。

Z 緩衝區的一些重要點

  • 要應用 Z 緩衝區方法,不需要對多邊形(平面)進行初始排序。

  • 即使平面的數量很大,Z 緩衝區也能提供快速的結果。

  • Z 緩衝區方法不需要進行物件比較。

  • 使用這種方法也可以檢測到非多邊形的隱藏物件。

  • 不需要其他資料結構來儲存和解決問題。

  • 可以實施硬體來加速處理過程,並且積極用於解決圖形工作站的問題。

  • 該方法僅可用於考慮的不透明物件,即透明物件可能會出現錯誤。

  • 繪製隱藏表面可能是一個耗時的過程。

更新於: 2020 年 4 月 17 日

1K+ 瀏覽量

開啟你的 職業生涯

完成課程後獲得認證

開始
廣告
© . All rights reserved.