- 1、本文档共27页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
有效边表填充算的实现计算机图形课程设计
计算机图形学 课程设计
设计题目 改进的有效边表算法对多边形的填充
学院名称 信息科学与技术学院
专业名称 计算机科学与技术
学生姓名 刘 柯
学生学号 201213030112
任课教师 梅 占 勇
设计(论文)成绩
教务处 制
2015年 9 月 28 日
目录
一、设计内容与要求 3
1.1 设计题目 3
1.2 设计内容 3
1.3 设计目标 3
二、总体设计 3
2.1 多边形的表示 3
2.2 x-扫描线算法 4
2.3 改进的有效边表算法 4
2.3.1 改进的有效边表算法 4
2.3.2 有效边表 5
2.3.3 边表 6
三、详细设计 8
3.1 改进的有效边表算法的实现 8
3.2 有效边表算法程序流程图 9
四、测试结果 9
五、总结 15
六、源代码 15
参考文献 26
一、设计内容与要求
设计题目
用改进的有效边表算法实现多边形的填充
1.2 设计内容
使用OpenGL实现用改进的有效边表算法填充多边形
1.3 设计目标
参照课本上改进的有效边表算法的思想,实现该算法的C语言代码,并用该算法搭配OpenGL以像素点的方式绘制出给定顶点坐标的多边形。
二、总体设计
2.1 多边形的表示
在计算机图形学中,多边形有2种重要的表示方法:顶点表示和点阵表示。
顶点表示用多边形的顶点序列来刻画多边形,这种方法直观、几何意义强,占用内存少,应用普遍,但它没有明确指出哪些像素在多边形内,故不能直接用于面着色。
点阵表示用位于多边形内的像素的集合来刻画多边形。 这种表示法虽然失去了许多重要的几何信息,但便于运用帧缓存表示图形,是面着色所需要的图形表示形式。
大多数图形应用系统采用顶点序列表示多边形,而顶点表示又不能直接用于显示,那么就必须有从多边形的顶点表示到点阵表示的转换,这种转换称为多边形的扫描转换或多边形的填充。即从多边形的顶点信息出发,求出位于其内部的各个像素,并将其颜色值写入帧缓存的相应单元中。
2.2 x-扫描线算法
x-扫描线算法的基本思想是,按照扫描线的顺序,计算扫描线与多边形的相交区间,再用要求的颜色显示这些区间的像素,即完成填充工作。区间的端点可以通过计算扫描线与多边形边界线的交点获得。根据此原理,x-扫描线算法可以填充凸的、凹的或带有孔的多边形区域。
x-扫描线的算法步骤如下:
确定多边形顶点的最小和最大y值(ymin和ymax),
从y=ymin到y=ymax,每次用一条扫描线填充。每一条扫描线填充的过程分为4个步骤:
求交。计算扫描线与多边形所有边的交点。
排序。把所有交点按x坐标递增的顺序进行排序。
交点配对。配对第一与第二、第三与第四个交点等,每对交点代表一个填充区间。
区间填色。把这些相交区间内的像素置成不同于背景色的填充色。
x-扫描线算法在处理每条扫描线时,需要与多边形的所有边求交,这样处理效率非常低。因为一条扫描线往往只与少数几条边相交,甚至与整个多边形都不相交。因此,有必要对算法进行改进。
2.3 改进的有效边表算法
2.3.1 改进的有效边表算法
将x-扫描线算法加以改进可以得到改进的有效边表算法,也称y连贯算法。改进可以从三个方面进行:首先,在处理一条扫描线时,仅对与它相交的多边形的边(有效边)求交;其次,利用扫描线的连贯性,考虑到当前扫描线与各边的交点顺序与下一条扫描线与各边的交点顺序很可能相同或非常相似,因此在当前扫描线处理完毕之后,不必为下一条扫描线从头开始构造交点信息;最后,利用多边形的连贯性,认为若某条边与当前扫描线相交,则它很可能也与下一条扫描线相交且其交点与上一次的交点相关。如下图所示,设直线的斜率为k,=xi;yi+1时,有xi+1=xi+1/k。
2.3.2 有效边表
有效边(Active Edge)是指与当前扫描线相交的多边形的边,也称活性边。把有效边按与扫描线交点x坐标递增的顺序存放在一个链表中,此链表称为有效边表(Active Edge Table,
其中,x为当前扫描线与有效边交点的x坐标;ymax是
文档评论(0)