- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 从顶点到片元
扫描线算法分析(举例分析) 扫描线算法分析(举例分析) 扫描线算法分析(举例分析) 边缘填充算法 ▼求余运算:假定A为一个正整数,则M的余定义为A – M, 记为 。计算机中取A为n位能表示的最大整数。即,A=0xFFFFFFFF ▼由来:光栅图形中,如果某区域已着上值为M的颜色值做偶数次求余运算,该区域颜色不变;而做奇数次求余运算,则该区域颜色变为值为 的颜色。这一规律应用于多边形扫描转换,就为边缘填充算法。 ▼算法基本思想:对于每条扫描线和每条多边形边的交点,将该扫描线上交点右方的所有象素取余。 1、将当前扫描线上的 所有象素着上 颜色; 2、求余: for(i = 0;i = m; i++) 在当前扫描线上, 从横坐标为Xi的交 点向右求余; 算法1(以扫描线为中心的边缘填充算法) 1、将绘图窗口的背景色置为 ; 2、对多边形的每一条非水平边做: 从该边上的每个象素开始向右求余; 算法2(以边为中心的边缘填充算法) 算法2(以边为中心的边缘填充算法) 边缘填充算法 适合用于具有帧缓存的图形系统。处理后,按扫描线顺序读出帧缓存的内容,送入显示设备。 优点:算法简单 缺点:对于复杂图形,每一象素可能被访问多次,输入/输出的量比有序边表算法大得多。 引入栅栏,以减少填充算法访问象素的次数。 栅栏:与扫描线垂直的直线,通常过一顶点,且把多边形分为左右二半。 基本思想:扫描线与多边形的边求交,将交点与栅栏之间的象素取补。 减少了象素重复访问数目,但不彻底。 栅栏填充算法 1. 对多边形的每一条边进行扫描转换,即对多边形边界所经过的象素作一个边界标志。 2.填充。对每条与多边形相交的扫描线,按从左到右的顺序,逐个访问该扫描线上的象素。 取一个布尔变量inside来指示当前点的状态,若点在多边形内,则inside为真。若点在多边形外,则inside为假。 Inside 的初始值为假,每当当前访问象素为被打上标志的点,就把inside取反。对未打标志的点,inside不变。 边界标志算法 边界标志算法:算法过程 void edgemark_fill(polydef, color) 多边形定义 polydef; int color; { 对多边形polydef 每条边进行直线扫描转换; inside = FALSE; for (每条与多边形polydef相交的扫描线y ) for (扫描线上每个象素x ) { if(象素 x 被打上边标志) inside = ! (inside); if(inside!= FALSE) drawpixel (x, y, color); else drawpixel (x, y, background); } } 边界标志算法 用软件实现时,扫描线算法与边界标志算法的执行速度几乎相同, 但由于边界标志算法不必建立维护边表以及对它进行排序,所以边界标志算法更适合硬件实现,这时它的执行速度比有序边表算法快一至两个数量级。 边界标志算法 思考:如何处理边界的交点个数使其成为偶数? 区域填充算法 区域指已经表示成点阵形式的填充图形,它是象素的集合。 区域填充指先将区域的一点赋予指定的颜色,然后将该颜色扩展到整个区域的过程。区域填充算法要求区域是连通的 区域填充 表示方法:内点表示、边界表示 内点表示 枚举处区域内部的所有像素 内部的所有像素着同一个颜色 边界像素着与内部像素不同的 颜色 边界表示 枚举出边界上所有的像素 边界上的所有像素着同一颜色 内部像素着与边界像素不同的颜色 区域填充 区域填充要求区域是连通的 连通性 4连通、8连通 4连通: 8连通 区域填充 4连通与8连通区域的区别 连通性: 4连通可看作8连通区域,但对边界有要求 对边界的要求 A:适合于内点表示区域的填充算法 设G为一内点表示的区域,(x,y)为区域内一点,old_color为G的原色。现取(x,y)为种子点对区域G进行填充:即先置像素(x,y)的颜色为new_color,然后逐步将整个区域G都置为同样的颜色。 步骤如下: 种子象素入栈,当栈非空时,执行如下三步操作: (1)栈顶象素出栈; (2)将出栈象素置成多边形色; (3)按上、下、左、右的顺序检查与出栈象素相邻的四个象素,若其中某个象素不在边界上且未置成多边形色,则把该象素入栈。 种子填充算法 种子填充算法 例:多边形由P0P1P2P3P4构成,P0(1,5)P1(5,5)P2(7,3)P3(7,1)P4(1,1) 设种子
原创力文档


文档评论(0)