例(7-5-2) 扫描线Z-buffer算法() �{ ��1) 对每个多边形求取其顶点中所含的y的最小值ymin和最大值ymax,按ymin进行排序,将多边形置入多边形y桶; ��2) 活化多边形表APT,活化边表AET初始化为空; ��3) For(每条扫描线i,i从小到大) ��{ ���(1) 帧缓存CB置为背景色; ���(2) 深度缓存ZB置为负无穷大(因为视方向为Z轴的负方向); ���(3) 将多边形y桶中对应扫描线i的新的多边形加入到活化多边形表APT中; ���(4) 对新加入的多边形,生成其相应的边Y桶; ���(5) 对APT中每一个多边形,若其边Y桶中对应扫描线i增加了新的边,则将新的边配对,加到活化边对表AET中; ���(6) for(AET中的每一对边) �����{ ������for (每一个满足xl <j < xr的象素j) ������{ ��������d = z +Δzl; //深度depth ��������if (d > ZB(i,j)) ��������{ ���������ZB(i,j) =d; ���������计算当前象素点的颜色值c; ���������写帧缓存CB(i,j)=c; ��������} �������} ������} ��(7) 删除APT中多边形顶点最大y坐标为i的多边形,并删除相应的边; ��(8) for (活化边表AET中的每一个边对) ����{ ������if (ylmax=i && yrmax=i) 删除ylmax和yrmax已等于i的边对; ������else if (ylmax或yrmax 已等于i) ������{ ��������删除ylmax或yrmax 已等于i的边; ��������对该多边形的边重新配对; ������} ������//用增量公式计算新的xl 、xr 和zl 。 ��� ��xl=xl+Δxl; ���� xr=xr+Δxr; ���� zl=zl+Δxl Δzl +Δz ; ����} ��} �} |