友情提示:同学您好,此页面仅供预览,在此页面学习不会被统计哦! 请进入学习空间后选择课程学习。

一、 z-buffer消隐算法的概念

深度缓冲区消隐算法,又称z-buffer消隐算法。该算法属于图像空间消隐算法,用以消除不可见的面,输出表面图。 深度缓冲区消隐算法是由pixel动画创始人、2019图灵奖得主,埃迪·卡特穆尔,在1974年提出的经典消隐算法。


深度缓冲区算法最显著的特点是算法中需要用到两个缓冲器,帧缓冲器和深度缓冲器,两个缓冲器的大小都至少定义为屏幕的大小,缓冲器的每个单元与屏幕像素一一对应。帧缓冲器,又称属性数组FB(x,y),每个单元存放对应像素的属性值,主要是颜色信息。深度缓冲器又称深度数组ZB(x,y),或称z缓冲器,每个单元存放对应像素的深度值。

二、z-buffer消隐算法的思想

先将 Z 缓冲器中各单元的初始值置为最小值。当要改变某个像素的颜色值时,首先检查当前扫描转换的多边形上对应点的深度值是否大于该像素原来的深度值(深度值保存在该像素所对应的 Z 缓冲器的单元中)。如果当前深度值大于原来的 z 值,说明当前多边形更靠近观察点,用它的颜色替换像素原来的颜色。

           

xoy 面为投影面,z 轴为 观察方向,红色矩形区域为投影屏幕。过屏幕任意像素点(x,y) 作平行于 z 轴的射线 R,与物体表面相交于 p1 和 p2 点,比较 p1 和 p2 的 z 值(也就是深度值),z 值大的点p1离视点近,将其z值存入 z 缓冲器中,在屏幕像素点(x,y)处显示 p1 点的颜色。

三、z-buffer消隐算法的描述

1)深度缓冲器所有单元均置为最小z值,帧缓冲器各单元均置为背景色,然后逐个处理多边形表中的各面片。

2)扫描转换多边形面片。每扫描一行,计算该行各像素点(x,y)所对应的深度值z(x,y),并将结果与深度缓冲器中该像素单元所存储的深度值ZB(x,y)进行比较。

3)若z>ZB(x,y),则ZB(x,y)= z,同时将该像素的属性值I(x,y)写入帧缓冲器,即FB(x,y)= I(x,y);否则不变。


四、z-buffer消隐算法应用


假设R表示无穷小的数,我们有红色三角形面片、紫色三角形面片需要扫描转换,每个三角形面片对应深度值都已给出,如图中所示。首先将深度缓冲器中所有单元均设置为最小值R,然后先扫描转换红色三角形,由于红色三角形中所有像素点的深度值都大于R,即离视点近,所以扫面转换结束后,屏幕中三角形对应区域的像素点被填充为红色。      进一步扫描转换紫色三角形,此时紫色三角形第一列深度值为6、7、8的点离视点更近,因此屏幕中原来像素点的颜色被替换为紫色;反之,第一列中深度值为3、4、5的点,其深度不大于对应像素点的深度5,因此屏幕像素点颜色不变。

五、深度值z的计算

若已知多边形的方程,则可用增量法计算扫描线上每一个像素的深度。设平面方程为:

则多边形面上的点(x,y)所对应的深度值为:

1. 沿x方向深度值的递增计算

2.  沿y方向深度值的递增计算


六、多边形平面方程的计算

多边形平面方程为:

平面法向量:  n(A,B,C)


则系数D可用下式求得:


七、z-buffer消隐算法的特点

优点:算法简单,易于处理复杂场景;无需排序,复杂度与屏幕分辨率相关;易于硬件实现

缺点:ZB和CB两个缓存数组占用的存储单元太多 ,需要有一个较大容量的 Z—Buffer ;无法处理透明物体间遮挡关系