📜  计算机图形学Z缓冲区算法

📅  最后修改于: 2020-12-21 09:29:49             🧑  作者: Mango

Z缓冲区算法

它也称为深度缓冲算法。深度缓冲算法是最简单的图像空间算法。对于显示屏上的每个像素,我们都会记录最接近观察者的像素内对象的深度。除了深度,我们还记录了应该显示以显示对象的强度。深度缓冲区是帧缓冲区的扩展。深度缓冲算法需要2个数组,强度和深度分别由像素坐标(x,y)索引。

算法

对于屏幕上的所有像素,将深度[x,y]设置为1.0,并将强度[x,y]设置为背景值。

对于场景中的每个多边形,找到投影到屏幕上时位于多边形边界内的所有像素(x,y)。对于以下每个像素:

(a)计算在(x,y)处的多边形的深度z

(b)如果z <深度[x,y],则该多边形比已经为该像素记录的其他多边形更靠近观察者。在这种情况下,将深度[x,y]设置为z,将强度[x,y]设置为对应于多边形阴影的值。相反,如果z>深度[x,y],则已经记录在(x,y)处的多边形比此新多边形更靠近观察者,并且不采取任何操作。

3.毕竟,多边形已经过处理;强度阵列将包含解。

4.深度缓冲算法说明了所有隐藏表面算法共有的几个功能。

5.首先,在这种情况下,它需要表示场景多边形中所有不透明的表面。

6.这些多边形可以是场景模型中记录的多面体的面,也可以仅表示场景中不透明的薄“薄片”。

7.该算法的第二个重要特征是它使用屏幕坐标系。在步骤1之前,使用矩阵乘法将场景中的所有多边形转换为屏幕坐标系。

深度缓冲区的局限性

  • 由于深度和强度阵列的巨大尺寸,深度缓冲算法并不总是实用的。
  • 生成具有500 x 500像素的栅格的图像,每个阵列需要2个50,000个存储位置。
  • 即使帧缓冲器可以为强度阵列提供存储器,深度阵列仍然很大。
  • 为了减少所需的存储量,可以将图像分为许多较小的图像,然后依次对每个图像应用深度缓冲算法。
  • 例如,可以将原始的500 x 500更快地划分为100个栅格,每个栅格50 x 50像素。
  • 处理每个小栅格仅需要2500个元素的数组,但是执行时间会增加,因为每个多边形都要处理多次。
  • 屏幕的细分并不总是会增加执行时间,而是可以帮助减少生成图像所需的工作。由于屏幕小区域之间的连贯性,导致这种减少。