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.