| Z-Buffer算法: Z-Buffer算法() { for (i=0,1,…,m) for (j=1,…,n) { 用背景色初始化帧缓存CB:CB(i,j)=背景色; 用最小Z值初始化深度缓存:ZB(i,j)=Zmin; } for(每一个多边形) { 将该多边形进行投影变换; 扫描转换该多边形在视平面上的投影多边形; for(该多边形所覆盖的每个象素(i,j) ) { 计算该多边形在该象素的深度值Zi,j; if(Zi,j > ZB(i,j) { ZB(i,j) = Zi,j; 计算该多边形在该象素的颜色值Ci,j; CB(i,j)= Ci,j; } } } } 利用多边形内的点在水平和垂直方向上的相关性,可以得到计算多边形的点及其深度值的算法步骤: 1) 将多边形的边按其y最小值排序,搜索多边形中各顶点的y值,找出其中最小的值ymin和最大值ymax; 2) 令扫描线从y=ymax到ymin以增量为1变化,依次对每条水平线进行扫描: (a) 找出与当前扫描线相交的所有边,利用垂直相关性求出这些边与扫描线 的交点,并将这些交点Qi(i=0,1,…,m)按x坐标从小到大排序; (b) for(i=0,1,…,m /2) {
深度缓存算法以离视点近的物体的投影取代离视点远的物体的投影,各个面出现的先后顺序是无关紧要的。它不用对物体进行排序,只需对平面进行扫描转换,因此有利于硬件实现。深度缓存算法最突出的缺点是两个缓存占用的存储空间太大。但是,随着目前计算机硬件的高速发展,Z缓冲器算法已被硬件化,这个问题也就随之消失。目前,几乎所有的三维图形显示加速卡都支持深度缓存算法,它已经成为最常用的一种消隐方法。 |