z- - Buffer算法-算法描述 帧缓存全置为背景色 深度缓存全置为最小Z值 for(每一个多边形 for(该多边形所覆盖的每个象素(x,y) 计算该多边形在该象素的深度值Z(x,y) if(Z(x,y)大于Z缓存在(x,y)的值) 把Z(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓 存的(x,y)处 2021/1/21 浙江大学计算机图形学
2021/1/21 浙江大学计算机图形学 11 Z-Buffer算法-算法描述 { 帧缓存全置为背景色 深度缓存全置为最小Z值 for(每一个多边形) { for(该多边形所覆盖的每个象素(x,y) ) { 计算该多边形在该象素的深度值Z(x,y); if(Z(x,y)大于Z缓存在(x,y)的值) { 把Z(x,y)存入Z缓存中(x,y)处 把多边形在(x,y)处的颜色值存入帧缓 存的(x,y)处 } } } } 需要计算的像素深度值次数 =多边形个数*多边形平均 占据的像素个数
Z- Buffer算法 ■Z缓冲器算法是所有图像空间算法中最简单的 种隐藏面消除算法。它在象素级上以近物取 代远物,与形体在屏幕上的出现顺序无关。 ■优点:1)简单稳定,利于硬件实现 2)不需要整个场景的几何数据 ■缺点:1)需要一个额外的Z缓冲器 2)在每个多边形占据的每个像素处都要计算 深度值,计算量大 2021/1/21 浙江大学计算机图形学 12
2021/1/21 浙江大学计算机图形学 12 Z-Buffer算法 ◼ Z缓冲器算法是所有图像空间算法中最简单的 一种隐藏面消除算法。它在象素级上以近物取 代远物,与形体在屏幕上的出现顺序无关。 ◼ 优点:1)简单稳定,利于硬件实现 2)不需要整个场景的几何数据 ◼ 缺点: 1)需要一个额外的Z缓冲器 2)在每个多边形占据的每个像素处都要计算 深度值,计算量大
Z- Buffer算法-改进算法 ■只用一个深度缓存变量zb的改进算法 ■一般认为,Z- Buffer算法需要开一个与图象 大小相等的缓存数组ZB,实际上,可以改进 算法,只用一个深度缓存变量zb。 2021/1/21 浙江大学计算机图形学 13
2021/1/21 浙江大学计算机图形学 13 Z-Buffer算法-改进算法 ◼ 只用一个深度缓存变量zb的改进算法。 ◼ 一般认为,Z-Buffer算法需要开一个与图象 大小相等的缓存数组ZB,实际上,可以改进 算法,只用一个深度缓存变量zb
Z- Buffer算法-改进算法过程 帧缓存全置为背景色 for(屏幕上的每个象素(i,j)) 深度缓存变量zb置最小值 Minvalue for(多面体上的每个多边形P) if(象素点〔i,j在p的投影多边形之内) 计算P在(i,j处的深度值 depth if( depth大于zb) I zb= depth index if(zb ! Minvalue) 在交点(i,j)处用多边形Pinx的颜色显示 2021/1/21 浙江大学计算机图形学 14
2021/1/21 浙江大学计算机图形学 14 Z-Buffer算法-改进算法过程 { 帧缓存全置为背景色 for(屏幕上的每个象素(i,j)) { 深度缓存变量zb置最小值MinValue for(多面体上的每个多边形Pk) { if(象素点(i,j)在pk的投影多边形之内) { 计算Pk在(i,j)处的深度值depth; if(depth大于zb) { zb = depth; indexp = k; } } } } if(zb != MinValue) 在交点 (i,j) 处用多边形Pindexp的颜色显示 } }
Z- Buffer算法-改进算法 n关键问题:判断象素点(i,j是否在多边形 Pk的投影多边形之内 n计算多边形P在点(i,j)处的深度。设多 边形P的平面方程为:ax+by+Cz+d=0 ai+bi+d 2021/1/21 浙江大学计算机图形学 15
2021/1/21 浙江大学计算机图形学 15 Z-Buffer算法-改进算法 ◼ 关键问题:判断象素点(i,j)是否在多边形 Pk的投影多边形之内 ◼ 计算多边形Pk在点(i,j)处的深度。设多 边形Pk的平面方程为: ax +by + cz + d = 0 c ai bj d depth + + = −