 |
 |
|
|
|
|
|
|
|
|
|
|
第四节
z-缓冲算法 |
|
|
|
|
|
|
|
|
z—缓冲算法(深度缓冲算法)是一种最简单的图象空间算法。对每一个点,这个算法不仅需要有一个更新缓冲器存储各点的象素值,而且还需要有一个z—缓冲存储器存储相应的z值。帧缓冲存储器初始化为背景值,z缓冲存储器初始化为可以表示的最大z值。对每一个多边形,不必进行深度排序算法要求的初始排序,立即就可以逐个进行扫描转换。
扫描转换时,对每个多边形内部的任意点(x,y),实施如下步骤:
1. 计算在点(x,y)处多边形的深度值z(x,y)。
2. 如果计算所得的z(x,y)值,小于在z—缓冲存储器中点(x,y)处记录的深度值,那么就做:
(1)把值z(x,y)送入z—缓冲存储器的点处。
(2)把多边形在深度z(x,y)处应有的象素值,送入更新缓冲存储器的点(x,y)处。
算法中深度计算,可通过多边形的顶点坐标求出所在平面的方程,然后再使用平面方程,对每个点(x,y),解出相应的z。
对面方程
,
解出z是:
设在点(x,y)处的深度值是z1:
则在点(x+△x,y)处的深度值就是
z—缓冲算法的工作流程:
帧缓冲区置成背景色;
z—缓冲区置成最大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)处;}
}
} |
|
|
|
|