本文概述
- 算法
- 深度缓冲区的局限性
算法 【计算机图形Z缓冲区算法】对于屏幕上的所有像素, 将深度[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个元素的数组, 但是执行时间会增加, 因为每个多边形要处理多次。
- 屏幕的细分并不总是会增加执行时间, 而是可以帮助减少生成图像所需的工作。由于屏幕小区域之间的连贯性, 导致出现这种减少。