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缓冲区方法中不需要对象比较。
也可以使用此方法检测非多边形隐藏对象。
不需要用于存储和解析的额外数据结构。
硬件实现可以加快处理过程,并积极地用于解决图形工作站。
该方法仅在所考虑的对象不透明时适用,即透明对象可能会产生错误。
绘制隐藏表面可能是一个耗时的过程。