- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
* Z缓冲器算法 算法描述: for ( v= 0;vvmax;v++) for (u= 0; uumax; u++) { 将帧缓冲器的第(u,v)单元置为背景色; 将Z缓冲器的第(u,v)单元置为-1(可见的最小深度值) } for (每个多边形) for (多边形在投影平面上的投影区域内的每个像素(u,v) ) { 计算多边形在当前像素(u,v)处的深度值d; if (d Z缓冲器的第(u,v)单元的值) { 置帧缓冲器的第(u,v)单元值为当前多边形颜色; 置Z缓冲器的第(u,v)单元值为d; } } * Z-Buffer Z-Buffer算法在象素级上以近物取代远物。形体在屏幕上的出现顺序是无关紧要的。 这种取代方法实现起来远比总体排序灵活简单,有利于硬件实现。 缺点:占用空间大,没有利用图形的相关性与连续性。 * 改进算法 只用一个深度缓存变量zb的改进算法。 一般认为,Z-Buffer算法需要开一个与图象大小相等的缓存数组ZB,实际上,可以改进算法,只用一个深度缓存变量zb。 * 算法过程 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) 计算多边形Pindexp在交点 (I,j) 处的光照颜色并显示 } } * 关键问题:判断象素点(i,j)是否在pk的投影多边形之内 计算多边形 在点(i,j)处的深度。设多边形Pk的平面方程为: * 扫描线Z缓冲器算法 由来:Z缓冲器算法中所需要的Z缓冲器容量较大,为克服这个缺点可以将整个绘图区域分割成若干个小区域,然后一个区域一个区域地显示,这样Z缓冲器的单元数只要等于一个区域内像素的个数就可以了。 如果将小区域取成屏幕上的扫描线,就得到扫描线Z缓冲器算法。 * 算法描述 for ( v= 0;vvmax;v++) { for (u= 0; uumax; u++) //对绘图窗的每一条扫描线初始化 { 将帧缓冲器的第(u,v)单元置为背景色; 将Z缓冲器的第u单元置为-1(可见的最小深度值 ) } for (每个多边形) { 求出多边形在投影平面上的投影与当前扫描线的相交区间 for (该区间内的每个像素(u,v) ) { 计算多边形在该像素处的深度值d; if (d Z缓冲器的第u单元的值) { 置帧缓冲器的第(u,v)单元值为当前多边形颜色; 置Z缓冲器的第u单元值为d; } } } } 扫描线Z缓冲器算法 * 数据结构 多边形Y表:将所有多边形存在多边形Y表中。 根据多边形顶点中最小的y坐标,插入多边形Y表中的相应位置。 多边形Y表中只保存多边形的序号和其顶点的最大y坐标。根据序号可以从定义多边形的数据结构中取多边形信息 待消隐对象 多边形y表 * 活化多边形表APT:与当前扫描线相交的多边形。APT是一个动态的链表 边Y表ET:活化多边形表中的每一个多边形都有一个边表ET 多边形P1的边表ET * 活化边对表AET 在一条扫描线上,同一多边形的相邻两条边构成一个边对。活化边表AET中存放当前多边形中与当前扫描线相交的各边对的信息。 xl ?xl ylmax xr ?xr yr max zl IP ?za ?zb (示意图见下页) * * 扫描线Z-buffer算法() { 建多边形y表;对每一个多边形根据顶点最小的y值,将多边形置入多边形y表。 活化
文档评论(0)