第七章 消隐显示.ppt

  1. 1、本文档共38页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
扫描线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 ; }}} 扫描线Z-bufer算法基本步骤: (1) 定义两个数组:深度数组depth[m]和颜色数组color[m]用以保存单条扫描线上的数据值。 (2)算法开始执行时,先对深度数组和颜色数组赋初值。即depth[i]=max; color[i]=bkcolor (3)在y方向上的排序。在逐条处理扫描线的过程中,扫描线平面的位置是不断变化的。在这个变化过程中,有些立体表面要开始进入扫描线平面,有些要退出扫描线平面,还有一些则仍然留在扫描线平面中,这是一个动态的过程。所以要判别出那些表面与当前的扫描线平面相交,从而可以求出当前扫描线平面与表面的截交线段。 (4)在x方向上排序。按照落在当前扫描线平面内各线段两端x坐标值的大小,顺序将扫描线划分为若干个间隔。 (5)按照对不同间隔的处理办法,确定不同类型的间隔所在区域的颜色,并置入颜色数组。 (6)当一条扫描线处理完毕后,就将颜色数组中的内容复制到帧缓冲器中(或直接输出到屏幕上)。然后从(2)开始继续处理下一条扫描线。 算法的突出特点是把把原来处理三维问题降级为处理二维问题,这就大大简化了计算和判别工作,但是当处在当前扫描线平面内的截交线段数量很多时,间隔的划分还是比较费事的。所以,为了提高效率,可以想办法,只要立体的面是不相贯的,那么可以将某些间隔合并。 如果对图形的质量要求可以放宽,采用隔行扫描,获得较快的饿速度。 区域采样算法 画家算法、Z缓冲区算法和扫描线算法都属于点取样算法。用这三种算法绘制物体真实图形时,总是在投影面取一组离散点,在各个离散点上解决消隐问题,以及确定颜色、亮度,用于显示屏幕上的对应像素。 区域采样算法,利用图形区域连贯性,在连续的区域上确定可见面及其颜色、亮度。 区域采样算法的基本思想,把物体投影到全屏幕窗口上,然后递归地分割窗口,直到窗口内目标足够简单,可以直接显示为止。该算法把初始窗口取做边界平行于屏幕坐标系的矩形。如果窗口内没有物体,则按背景色显示,若窗口内只有一个面,则将该面显示出来,否则,窗口内含有两个以上的面,则把窗口等份为四个小窗口,对每个小窗口再作上述同样的处理。这样反复地进行下去。如果在到某个时刻,窗口的大小仅有像素那么大,而窗口内仍然有两个以上的面,这时不必继续再分割,只要取窗口内最近的可见面的颜色或所有可见面的平均色作为该像素的值。上述算法可以借助于栈结构进行实现。 区域采样过程 包含 相交 包围 分离 多边形和窗口的关系 开始 全屏窗口(0,0,1024)压入堆栈 从栈中弹出窗口(x,y,s) 检查窗口与物体的覆盖关系 窗口内目标简单? 显示窗口内目标 显示该像素 s?1?

文档评论(0)

wxc6688 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档