计算机图形学ppt课件-第二章基本图形的生成与计算-.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《计算机图形学ppt课件-第二章基本图形的生成与计算-.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 ppt 课件 第二 基本 图形 生成 计算
- 资源描述:
-
1、图形的扫描转换(光栅化):确定一个像素集合,用于显示一个图形的过程。步骤如下:1、确定有关像素2、用图形的颜色或其它属性,对像素进行写操作。对一维图形,不考虑线宽,则用一个像素宽的直线来显示图形。二维图形的光栅化,即区域的填充:确定像素集,填色或图案。任何图形的光栅化,必须显示在一个窗口内,否则不予显示。即确定一个图形的哪些部分在窗口内,哪些在窗口外,即裁剪。图形显示前需要:扫描转换+裁剪裁剪-扫描转换:最常用,节约计算时间。扫描转换-裁剪:算法简单;直线的扫描转换直线的扫描转换:确定最佳逼近于该直线的一组象素,并且按扫描线顺序,对这些象素进行写操作。三个常用算法:数值微分法(DDA)中点画线
2、法Bresenham算法。dxdyxxyym1212设直线起点为(x1,y1),终点(x2,y2),则斜率m为)(,;21yroundxbmxystepxxxxxx令这种方法直观,但效率太低,因为每一步需要一次浮点乘法和一次舍入运算。增量算法:在一个迭代算法中,如果每一步的x、y值是用前一步的值加上一个增量来获得,则称为增量算法。DDA算法就是一个增量算法。计算yi+1=mxi+1+b =mxi+b+kx =yi+mx 当x=1;yi+1=yi+m 即:当x每递增1,y递增m(即直线斜率);注意上述分析的算法仅适用于m 1的情形。在这种情况下,x每增加1,y最多增加1。当 m 1时,必须把x,
3、y地位互换1a1b2b2a3a3b4b4a(x1,y1)(x2,y2)直线从(x1,y1)到(x2,y2)的方向不同,分为8个极限。方向在第1a象限内的直线,取增量Dx=1,Dy=m;在1b象限内的,取增量Dy=1,Dx=1/m。表.1研究表.1的数据,可以得到如下规律:1、当|dx|dy|时|Dx|=1,|Dy|=m否则|Dx|=1/m,|Dy|=12、Dx,Dy的符号与dx,dy的符号相同依据上述规律可以生成直线,每生成一条直线做两次除法,画线中的每点做两次加法,所以DDA算法生成直线的速度还是很快的。void DDALine(int x0,int y0,int x1,int y1,int
4、 color)int x;float dx,dy,y,k;dx=x1-x0;dy=y1-y0;k=dy/dx;y=y0;for(x=x0;xx1,x+)drawpixel(x,int(y+0.5),color);y=y+k;0 1 2 3 4 5321Line:P0(0,0)-P1(5,2)缺点:在此算法中,y、k必须是float,且每一步都必须对y进行舍入取整,不利于硬件实现。P=(xp,yp)QP2P1点在直线下方点在直线上方点在直线上面0,0,0,yxFyxFyxFP=(xp,yp)QP2P1P=(xp,yp)QP2P1P=(xp,yp)QP2P1P=(xp,yp)QP2P10 1 2
5、3 4 5321bmxy本算法是1122dxdyxxyymxmyb121211,此处讨论先将直线方向限于1a象限,当11iixx而y的相应增加值应当小于1。为了光栅化,只能选择图2.2中两种位置之一1iyyxiXi+1yid1d2yi+1图2.2yi+1的位置可以选择yi+1=yi或者yi+1=yi+1,选择的原则是看精确值y与yi和yi+1的距离d1和d2的大小而定。计算公式为bxmyi)1(iyyd1yydi12(2.1)(2.2)(2.3)如果d1-d20,则yi+1=yi+1,否则yi+1=yi。关键是简便的求出d1-d2的符号。将2.1,2.2,2.3代入d1-d2得122)1(21
6、2221byxdxdyyyddiii用dx乘等式两边,同时令pi=(d1-d2)dx得dxbdydxydyxpiii)12(222在1a象限内,dx总大于0,所以pi可以判断d1-d2的符号。Pi+1为dxbdydxyyydyxpiiiii)12(2)222(2111dxbdydxyyydyxiiii)12(2)222()1(21dxyydypiii)(221求误差的初值p1,可将x1,y1代入式2.4中的xi,yi,得到dxdyp 21(2.4)(2.5)第1a象限内的直线Bresenham算法如下:1、画点(x1,y1),dx=x2-x1,dy=y2-y1,误差初值 p1=2dy-dx,i
7、=12、直线的下一点位置xi+1=xi+1,如果pi0,则yi+1=yi+1,否则yi+1=yi3、画点(xi+1,yi+1)4、求下一个误差pi+1,如果pi0,则pi+1=pi+2dy-2dx,否则pi+1=pi+2dy5、i=i+1如果idx+1,则转步骤2,否则结束Bresenham优点:1、不必计算直线斜率,所以不做除法2、不用浮点数,只用整数3、只做整数加减运算和乘2运算,乘2可以用移位来实现基础知识-圆的表示1、直角坐标法 2、极坐标法222)()(ryyxxccsin,cosryyrxxccyxMP1P2P(Xp,Yp)MP1P2MP1P2MP1P2MP1P2圆的Bresenh
8、am算法yiyyi-1Xi+1xi01d2d我们设圆的半径为r,圆心在(,),考虑从(,r)顺时针方向/8圆周的生成过程。X从开始,到x=y结束。即有11iixx相应的yi+1就有两种选择:1,11iiiiyyyyyi+1取值就要看精确值y是靠近yi还是靠近yi-1,计算公式为:222)1(ixry222221)1(iiixryyyd222222)1()1()1(iiiyxryyd令pi=d1-d2,并代入d1,d2,则有22222)1()1(2ryyxpiiiiPi为误差。如果pi0,则yi+1=yi,否则yi+1=yi-1,pi的递归式为:(2.6)221212112)1()1(2ryyx
9、piiii212122122)11(2ryyxiii212221221)(2)(264)1(2ryyyyyyxxiiiiiiii2122212212)(22)(264)1(2ryyyyyyxxiiiiiiii)(2)(2642)1()1(212212222iiiiiiiiyyyyxryyx)(2)(2641221iiiiiiyyyyxpPi的初值由2.6式代入xi=0,yi=r得rp231Bresenham圆周生成算法如下:1、求误差初值,p1=3-2r,i=1,画点(0,r)2、求下一个光栅位置,其中xi+1=xi+1,如果pi0,则yi+1=yi,否则yi+1=yi-1 3、画点(xi+1
10、,yi+1)4、计算下一个误差,如果pi0,pi+1=pi+4xi+6,否则pi+1=pi+4(xi-yi)+105、i=i+1,如果x=y,则结束,否则返回步骤22.3.1基础知识区域填充:即给出一个区域的边界,要求对边界内所有像素单元赋予指定颜色代码。区域填充最常用的是多边形填色。多边形填色即给出一个多边形的边界,要求对边界内所有像素赋予指定的颜色。要完成这些任务,首要问题是判断一个像素是在多边形内还是多边形外。常用“扫描交点的奇偶数判断法”。1、将多边形画在平面内2、用一根水平线自左向右扫描,从而与多边形相交,扫描线与边界相交奇数次后进入多边形,相交偶数次后走出多边形。上述方法似乎很完美
11、,但并非如此,因为直线在光栅化后就变成了占有单位空间的离散点,在扫描部分点时用该方法会出错。所以要对该方法作周密的改善。abcdABC扫描线填色方法有两大类:1、扫描线填色算法(Scan-Line Filling)建立在多边形边界的矢量形式数据上,可用于程序实现,也可用于交互填色。2、种子填色算法(Seed Filling)建立在多边形边界的图形形式数据上,难于用程序实现。算法的基本思想:用水平线从上到下扫描有点线段构成的多段定义多边形。每根扫描线与多边形产生一系列交点。将这些交点按照X坐标进行分类,将分类后的交点成对取出,作为两个端点,以所需要的色彩画水平直线。多边形被扫描完毕后,填色也就完
12、成。基本思想中要解决几个问题:1、左右顶点处理 122313(a)左顶点(b)右顶点Y1y2y2y3当扫描线与多边形每个顶点相交时,会同时产生2个交点,这是因为一个顶点同属于多边形两条边的端点。如果所交的顶点是左顶点或右顶点,填色就会因为扫描交点的奇偶计数出错而出现错误。这时对所有的左右交点做如下处理:左右顶点的入边(以该顶点为终点的边)之终点删除。对于左顶点,入边端点(x1,y1)(x2,y2)修改为(x1,y1)、(x2-1/m,y2-1);对于右顶点入边端点(x1,y1)(x2,y2)修改为(x1,y1)、(x2+1/m,y2-1),其中1212xxyym对于多边形的上顶点或下顶点,奇偶
13、数目正确,因此不用修改。2、水平边处理水平边(y1=y2)与水平扫描线重合,无法求交点,因此将水平边删除。3、扫描线与边的交点求取办法采用递归算法以(x1,y1)(x2,y2)为端点的边与第i+1 条边的交点为11iiyy12121yyxxxxii4、减少求交计算量,采用活性边表每根扫描线与多边形所有边求交的操作是一种浪费,需要改进。活性表(Active List of Side)采用将多边形的边分成两个子集:与当前扫描线相交的边集合和与当前扫描线不相交的边集合。活性表构造方法:1)将经过左右顶点处理并剔除水平边后的多边形的各边按maxy值排序,存入一个线性表,表中每个元素代表一条边,第一个元
14、素是maxy值最大的边,最后一个是最小的边。2)设置两个指针first和last,这两个指针间是与当前扫描线相交的边的集合和已经处理完(即扫描完)的边的集合。区分这两者的办法是在处理完的边上面加记号0yLast指针后的是未与当前扫描线相交的边。这时每根扫描线只需与位于firstlast之间且 不为0的边求交即可。yscan1ADIHCEFGBscan2firstlast(a)扫描线填充(b)活性表及其指针3、活性表中每个元素的内容包含以下几项:(1)边的maxy值,记为y_top(2)与当前扫描线相交的点的X坐标值,记为x_int(3)边的Y方向当前总长,初始值为y2-y1记为(4)边的斜率的
15、倒数:记为x_change_per_scan4、活性表在每根扫描线扫描之后刷新,刷新2项y1212yyxx(1)调整 first和last指针间的参加求交运算的边的元素值:1yyscanperchangexxx_int_int_(2)调整first和last指针,以便使新边进入激活范围,处理完的边退出激活范围。当first指的边 为0时,first=first+1;当last指的下一条边的y_top大于下一扫描线的y值时,last=last+1y种子填色又称边界填色(Boundary Filling),功能是给出多边形光栅化后的边界位置、边界色代码以及多边形内一点(x,y)的位置,要求将颜色填
16、满多边形。通常有两种:四邻法、八邻法四邻法是已知(x,y)是多边形内一点,在这点的上下左右四个方向进行测试、填色、扩散。缺点是不能通过狭窄区域,因此不能填满多边形。八邻法是在多边形内一点的8个方向进行测试、填色、扩散。缺点是有时会超出多边形的边界。由于填不满往往比涂出更易于补救,所以四邻法比八邻法用的普遍。点阵式字符是将字符表示一个矩形点阵,由点阵中点的不同值表达字符的形状。由于光栅扫描显示器的普遍使用,点阵式字符表示已经成为一种字符表示的主要形式。如果从字库中读出原字符,经过变换复制到缓冲器中的操作用专门的硬件来完成,可大大加快字符生成速度。将字符表达为点坐标的序列,相邻两点表示一条矢量,字
展开阅读全文