第3章 基本图形光栅化.ppt





《第3章 基本图形光栅化.ppt》由会员分享,可在线阅读,更多相关《第3章 基本图形光栅化.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、计算机图形学计算机图形学第第3章章 基本图形光栅化基本图形光栅化主讲教师:尉秀梅主讲教师:尉秀梅第第3章章 基本图形光栅化基本图形光栅化 3.1 直线的光栅化直线的光栅化 3.2 圆的光栅化圆的光栅化 3.3 区域填充区域填充 3.4 字符表示字符表示 3.5 反走样反走样 3.1 直线的光栅化直线的光栅化在数学上,理想的直线是没有宽度的、由无在数学上,理想的直线是没有宽度的、由无数个点构成的集合。当我们对直线进行光栅化时,数个点构成的集合。当我们对直线进行光栅化时,只能在显示器所给定的有限个像素组成的矩阵中,只能在显示器所给定的有限个像素组成的矩阵中,确定最佳逼近该直线的一组像素,并且按扫描
2、线确定最佳逼近该直线的一组像素,并且按扫描线顺序对这些像素进行写操作,这就是通常所说的顺序对这些像素进行写操作,这就是通常所说的直线的扫描转换。直线的扫描转换。通常用于直线光栅化的算法有数值微分法通常用于直线光栅化的算法有数值微分法(DDA)、中点画线法和)、中点画线法和Bresenham画线算法。画线算法。3.1.1DDA算法算法DDA(Digital Differential Analyzer)法是根法是根据直线的微分方程来画直线的。据直线的微分方程来画直线的。设直线的起点坐标为设直线的起点坐标为Ps(xs,ys),终点坐标为,终点坐标为Pe(xe,ye),令,令x=xe-xs,y=ye-
3、ys,则要绘,则要绘制的直线的微分方程为制的直线的微分方程为 取时间步长为取时间步长为1/t,则可得上述微分方程数,则可得上述微分方程数值解的递推公式为值解的递推公式为 3.1.1DDA算法算法通常情况下,直线的方向分为通常情况下,直线的方向分为8个不同的区域,个不同的区域,每个区域的处理方法有所不同。每个区域的处理方法有所不同。区域区域dxdy1a1y/x1bx/y12a-1y/x2b-x/y13a-1-y/x3b-x/y-14a1-y/x4by/x-1 3.1.1 DDA算法算法例:画直线段例:画直线段P0(0,0)-P1(5,2)解:斜率解:斜率K=2/5=0.4,所以,所以X方向每次步
4、长为方向每次步长为1,Y方向方向递增递增K.初始点为(初始点为(0,0)。)。x int(y+0.5)y000100.4210.8311.2421.6522.0 3.1.2 中点画线法中点画线法为了讨论方便,假设直线的斜率在为了讨论方便,假设直线的斜率在0到到1之间,若直线在之间,若直线在x方方向上增加一个光栅单位,则在向上增加一个光栅单位,则在y方向上的增量只能在方向上的增量只能在0到到1之间。之间。设设P(x,y)是直线上的一点,与是直线上的一点,与P点最近的网格点为点最近的网格点为(xi,yi),那那么,下一个与直线最近的像素只能是正右方的网格点么,下一个与直线最近的像素只能是正右方的网
5、格点PB(xi+1,yi)或右上方的网格点或右上方的网格点PT(xi+1,yi+1)两者之一。再以点两者之一。再以点M(xi+1,yi+0.5)表示表示PB和和PT的中点,设的中点,设Q是直线与垂直线是直线与垂直线x=xi+1的交点。的交点。显然,若显然,若M在在Q的下方,则的下方,则PT离直线较近,应取离直线较近,应取PT为下一个像素为下一个像素点,否则应取点,否则应取PB做为下一个像素点,这就是中点画线算法的基本做为下一个像素点,这就是中点画线算法的基本思想。思想。3.1.2 中点画线法中点画线法设直线的起点和终点分别为(设直线的起点和终点分别为(x0,y0)和和(x1,y1),则直线,则
6、直线方程为方程为F(x,y)=ax+by+c=0其中其中a=y0-y1,b=x1-x0,c=x0y1-x1y0。构造构造判别式判别式:采用增量计算:采用增量计算 d=F(M)=F(x+1,y+0.5)=a(x+1)+b(y+0.5)+c在在d0的情况下,取正右方像素的情况下,取正右方像素PB,判断下一像素应计算判断下一像素应计算 d1=a(x+2)+b(y+0.5)+c=d+a 在在d0的情况下,取右上方像素的情况下,取右上方像素PT,判断下一像素应计算判断下一像素应计算 d2=a(x+2)+b(y+1.5)=d+a+bd的初始值的初始值d0=a+0.5b 3.1.2 中点画线法中点画线法由于
7、我们使用的只是由于我们使用的只是d的符号,而且的符号,而且d的增量都是的增量都是整数,只是其初始值包含小数。因此,我们可以用整数,只是其初始值包含小数。因此,我们可以用2d代代替替d,来摆脱小数。,来摆脱小数。如果进一步把算法中如果进一步把算法中2*a改为改为a+a等等,那么这个等等,那么这个算法不仅只包含整数变量,而且不包含乘除法,适合硬算法不仅只包含整数变量,而且不包含乘除法,适合硬件实现。件实现。3.1.3 Bresenham画线算法画线算法原理原理:过各行各列像素中心构造一组虚拟网格线,按直过各行各列像素中心构造一组虚拟网格线,按直线从起点到终点的顺序计算直线与各垂直网格线的交点,线从
8、起点到终点的顺序计算直线与各垂直网格线的交点,然后确定该列像素中与此交点最近的像素。然后确定该列像素中与此交点最近的像素。若若st,则,则Si比较靠近理比较靠近理想直线,应选想直线,应选Si;若若st,则,则Ti比较靠近理比较靠近理想直线,应选想直线,应选Ti。设直线的起点和终点分别为(x1,y1)和(x2,y2),则直线方程为y=y1+dy/dx(x-x1),其中dx=x2-x1,dy=y2-y1直线方程经变换后可表示为从(0,0)到(dx,dy),方程可简化为y=dy/dx*xs-t=2*(xi-1+1)-2yi-1-1s=*(xi-1+1)-yi-1t=(yi-1+1)-*(xi-1+1
9、)dx(s-t)=2(xi-1dy-2yi-1dx)+2dy-dx 3.1.3 Bresenham画线算法画线算法递推公式:当di0时,选Ti,当di1时,将时,将x、y和和dx、dy对对换,即以换,即以y向作为增长方向,向作为增长方向,y总是增总是增1(或减(或减1),),x是否增减是否增减1,则根据的符号判断:,则根据的符号判断:d0时时x增增1(或减(或减1););d0时,时,x不变。不变。(2)根据)根据dx和和dy的符号来控制的符号来控制(x或或y)增增1还是减还是减1。双步算法双步算法1987年有人提出二步法,即每循环一次不是绘制一年有人提出二步法,即每循环一次不是绘制一个象素,而
10、是绘制二个象素,这样无疑可以把生成直线个象素,而是绘制二个象素,这样无疑可以把生成直线的速度提高一倍。的速度提高一倍。下图为双步算法的四种情况下图为双步算法的四种情况。3.2 圆的光栅化圆的光栅化与直线的生成类似,圆的生成算法的好坏将与直线的生成类似,圆的生成算法的好坏将直接影响到绘图的效率。本节仅讨论圆心位于坐直接影响到绘图的效率。本节仅讨论圆心位于坐标原点的圆弧生成算法,对于圆心为任意的圆弧,标原点的圆弧生成算法,对于圆心为任意的圆弧,可以先将其平移到原点,然后光栅化,再平移到可以先将其平移到原点,然后光栅化,再平移到原来的位置。原来的位置。3.2.1中点画圆算法中点画圆算法假设圆的半径为
11、假设圆的半径为R,则圆的方程为,则圆的方程为当点(当点(x,y)在圆内时,)在圆内时,F(x,y)0;当点(当点(x,y)在圆上时,)在圆上时,F(x,y)=0;3.2.1中点画圆算法中点画圆算法中点画圆算法的基本原理是:中点画圆算法的基本原理是:假设点假设点P(xp,yp)为圆弧上一点,为圆弧上一点,如图如图3-5所示,那么,下一个与圆所示,那么,下一个与圆弧最近的像素点只能是正右方的点弧最近的像素点只能是正右方的点P1(xp+1,yp)或右下方的点或右下方的点P2(xp+1,yp-1)。令。令M为为P1和和P2的中的中点,易知点,易知M的坐标为的坐标为(xp+1,yp-0.5)。显然,若。
12、显然,若M在圆内,则在圆内,则P1离圆弧近,应取为下一个像素点;离圆弧近,应取为下一个像素点;否则应取否则应取P2作为下一个像素点。作为下一个像素点。判别式判别式d:d的初始值为:的初始值为:在在d0的情况下,取右下方像素的情况下,取右下方像素P2,在在d0的情况下,取正右方像素的情况下,取正右方像素P1,3.2.1中点画圆算法中点画圆算法 为了消除在计算判别式初始值产生的浮点数运算,将用4d来代替d。3.2.1中点画圆算法中点画圆算法下述程序使用中点画圆算法绘制一个下述程序使用中点画圆算法绘制一个1/8圆弧。圆弧。void MidPointCircle(int r,int color)int
13、 x,y,dx=0;y=r;d=5-4r;CirclePoint(x,y,color);while(x=y)if(d=0)d+=8x+12;else d+=8(x-y)+20;y-;x+;CirclePoint(x,y,color);3.2.2Bresenham画圆算法 Bresenham画圆算法是最有效的算法之一。画圆算法是最有效的算法之一。Bresenham画圆算法的基本原理是如画圆算法的基本原理是如下下图所示,若图所示,若Pi-1(xi-1,yi-1)为已经选定的点,那么下一个可能的像素点)为已经选定的点,那么下一个可能的像素点为其正右方的点为其正右方的点Si或右下方的点或右下方的点Ti
14、。若若Si到圆弧的距离到圆弧的距离小于小于Ti到圆弧的距离,则取到圆弧的距离,则取Si,反之取,反之取 Ti。3.2.2Bresenham画圆算法设设R为圆弧的半径,记为圆弧的半径,记P(x,y)到原点的距离的平方与)到原点的距离的平方与圆的半径的平方之差为圆的半径的平方之差为D(P),即),即 3.2.2Bresenham画圆算法当当di0时,点时,点Si做为下一个像素点做为下一个像素点xi+1=xi+1,yi=yi-1,故故当当di0时,点时,点Ti做为下一个像素点做为下一个像素点xi+1=xi+1,yi=yi-1-1,故故 3.2.2Bresenham画圆算法根据算法,可得根据算法,可得
15、Bresenham生成圆弧的程序如下:生成圆弧的程序如下:void bresenham_arc(int R,int color)int x,y,d;x=0;y=R;d=3-2*R;while(xy)putpixel(x,y,color);if(d0)d+=4*x+6;else d+=4*(x-y)+10;y-=1;x+;if(x=y)putpixel(x,y,color);3.3 区域填充区域填充区域填充即给出一个区域的边界,要求对边界范围区域填充即给出一个区域的边界,要求对边界范围内的所有像素单元赋予指定的颜色代码。区域填充中最内的所有像素单元赋予指定的颜色代码。区域填充中最常用的是多边形填
16、色。常用的是多边形填色。3.3.1多边形填充算法多边形填充算法1多边形的表示方法多边形的表示方法在计算机图形学中,多边形有两种重要的表示方法:顶在计算机图形学中,多边形有两种重要的表示方法:顶点表示和点阵表示。点表示和点阵表示。顶点表示是用多边形的顶点序列来描述多边形,用序列顶点表示是用多边形的顶点序列来描述多边形,用序列表示多边形。表示多边形。点阵表示用位于多边形内的像素集合来描述多边形。点阵表示用位于多边形内的像素集合来描述多边形。逐点判断法逐点判断法多边形填充最简单的方法就是逐点判断,即逐个判多边形填充最简单的方法就是逐点判断,即逐个判断绘图窗口内的像素,确定它们是否在多边形区域内部,断
17、绘图窗口内的像素,确定它们是否在多边形区域内部,从而求出位于多边形区域内的像素的集合。通常有两种从而求出位于多边形区域内的像素的集合。通常有两种方法:射线法,累计角度法。方法:射线法,累计角度法。1)射线法)射线法从从v点发出射线与多边形点发出射线与多边形P的边相交,若交点的个数的边相交,若交点的个数为奇数,则为奇数,则v位于多边形位于多边形P内;若为偶数,则内;若为偶数,则v位于多边位于多边形形P外部。外部。累计角度法累计角度法 计算各边的夹角的和,若代数和为零,该点计算各边的夹角的和,若代数和为零,该点域外;若域外;若代数和为代数和为22,该点,该点域内。域内。扫描线多边形填充算法扫描线多
18、边形填充算法从前画的介绍已知,多边形填充给出一个从前画的介绍已知,多边形填充给出一个多边形的边界,要求给多边形边界范围的所有多边形的边界,要求给多边形边界范围的所有像素单元赋予指定的颜色代码。要完成这个任像素单元赋予指定的颜色代码。要完成这个任务,一个首要的问题是判断一个像素是在多边务,一个首要的问题是判断一个像素是在多边形内还是在多边形外。数学上经常采用的方法形内还是在多边形外。数学上经常采用的方法是是“扫描线交点的奇偶数判断扫描线交点的奇偶数判断”法:用一根水法:用一根水平扫描线自左而右通过多边形而与多边形的边平扫描线自左而右通过多边形而与多边形的边界相交,扫描线与边界相交奇次数后进入该多
19、界相交,扫描线与边界相交奇次数后进入该多边形,相交偶次数后走出该多边形。边形,相交偶次数后走出该多边形。扫描线多边形填充算法扫描线多边形填充算法顶点计数问题:顶点计数问题:当顶点在多边形两边之下方时,该点计当顶点在多边形两边之下方时,该点计2 2次;次;当顶点在多边形两边之上方时,该点计当顶点在多边形两边之上方时,该点计0 0次;次;当顶点在多边形两边之间时,该点计当顶点在多边形两边之间时,该点计1 1次;次;对于多边形的水平边,不计它与扫描线的交点对于多边形的水平边,不计它与扫描线的交点扫描线多边形填充算法扫描线多边形填充算法扫描线多边形填充算法是按扫描顺序,计算扫描线与多扫描线多边形填充算
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 基本图形光栅化 基本 图形 光栅

限制150内