C ++中的Z缓冲区或深度缓冲区方法

z缓冲区(也称为深度缓冲区)是用于隐藏表面检测的方法。

隐藏表面检测

对于具有透明对象和表面的任何图片。在这种情况下,其他对象后面的对象将被隐藏。为了正确显示图像,我们需要除去这些隐藏的表面。该识别称为隐藏表面问题。

在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缓冲区方法中不需要对象比较。

  • 也可以使用此方法检测非多边形隐藏对象。

  • 不需要用于存储和解析的额外数据结构。

  • 硬件实现可以加快处理过程,并积极地用于解决图形工作站。

  • 该方法仅在所考虑的对象不透明时适用,即透明对象可能会产生错误。

  • 绘制隐藏表面可能是一个耗时的过程。