计算机图形学完整课件.ppt
《计算机图形学完整课件.ppt》由会员分享,可在线阅读,更多相关《计算机图形学完整课件.ppt(326页珍藏版)》请在课桌文档上搜索。
1、计算机图形学,第二章、基本图形生成原理第三章、图形几何变换第四章、多边形及多边形填充算法第五章、图案及动画程序设计第六章、裁剪算法第七章、自由曲线,第一章、绪论,1.1、概述1.2、计算机图形学的发展1.3、计算机图形学的应用1.4、计算机图形系统1.5、计算机图形标准,1.1 概述,1.1.1 计算机图形学的概念 计算机图形学Computer Graphics 是一门新兴学科,国际标准化组织ISO定义为:计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论,应用数学及计算机科学基础上的一门边缘学科。,1.1.2计算机图形学的
2、研究内容,1.基于图形设备的基本图形元素的生成算法。2.图形元素的几何变换。3.自由曲线和曲线的插值、拟合、拼接、分解、过渡、光顺、整体和局部修改等。4.三维几何造型技术。5.三维形体的实时显示。6.真实感图形的生成算法。7.山、水、花、草、烟云等模糊景物的模拟生成和虚拟现实环境的生成。8.科学计算可视化和三维或高维数据场的可视化。,1.1.3 计算机图形学与图象处理的关系,计算机图形学的基本含义是使用计算机通过算法和程序在显示设备上构造出图形来。也就是说,图形是人们通过计算机设计和构造出来的,不是通过摄象机和扫描仪等设备输入的图象。所设计和构造的图形可以是现实世界已经存在的物体的图形,也可以
3、显示完全虚构的物体。因此,计算机图形学是真实的物体或虚构物体图形的综合技术。,与此相反,图象处理是景物或图象的分析技术,它所研究的是计算机图形学的逆过程,图象增加、模式识别、景物分析、计算机视觉等,并研究如何从图象中提取二维或三维物体的模型。,尽管计算机图形学和图象处理所涉及的都是用计算机来处理图形和图象,但是长期以来却属于不同的两个技术领域。近年来,由于多媒体技术、计算机动画、三维空间数据场显示及纹理映射等的迅速发展,计算机图形学和图象处理的结合日益紧密,并相互渗透。,1.2 计算机图形学的发展,1.2.1 计算机图形学的发展简史年代准备阶段年代发展阶段年代推广应用阶段年代系统实用化阶段年代
4、标准化智能化阶段,1.2.2 计算机图形学的发展方向 造型技术的发展 真实图形生成技术的发展 人机交互技术的发展 模拟艺术的仿真 计算机动画,1.3 计算机图形学的应用,1.用户接口2.计算机辅助设计与制造(CAD/CAM)3.地形地貌和自然资源图4.计算机动画和艺术5.科学计算可视化6.游戏,1.4 计算机图形系统,计算机图形系统硬件 计算机图形系统软件 计算机图形显示原理 光栅扫描式图形显示器,1.5 计算机图形标准,GKS PHIGS CGM CGI,第二章、基本图形生成原理,2.1 直线的生成2.2 圆与椭圆的生成,2.1 直线的生成,2.1.1 数值微分法(DDA法)2.1.2 中点
5、画线法2.1.3 Bresenham画线算法2.1.4 Turboc 2.0 图形函数介绍,2.1.1数值微分法:直线方程 y=kx+b 给出线段的两个端点(x1,y 1)和(x2,y2)可以算出k和b k=y/x=(y2-y1)/(x2-x1)b=y1-kx1再用setpixel(x,int(y0.5),color)输出该系统的颜色值便可画出直线.但是画线效率太低,这是因为每步都需浮点乘法运算和一个四舍五入.,数值微分算法的描述 对任何沿直线给定的x的增量x,可以从下中计算出y的增量 y=kx 同样可以得出对应于指定的 x=y/k 当对于斜率的绝对值|k|1的线段怎么实现呢?,算法演示,2.
6、1.2中点画线法,那么,下一个与直线最近的像素只能是正右方的p1(,)或右上方 p2(,)用空心小圆表示。再以M表示P1与p2的中点,即M=(,)。又设Q是理想直线与垂线 交点。显然,若M在Q的下方,则p2离直线近,应取为下一个像素;否则应取p1。这就是中点画线法的基本原理。,为了讨论方便,这里假定直线斜率在0-1之间,其它两种情况可参照下述讨论进行相应处理。如图所示,若直线在x方向增加一个单位,则在y方向的增量只能在0-1之间。假设直线上当前已确定的一个像素点坐标为(xp,yp),用实心小圆表示。,G,算法推导:下面我们来讨论中点画线算法的实现。假设直线的起点和终点分别为(x1,y1)和(x
7、2,y2)则直线方程为 F(x,y)=ax+by+c=0,其中,a=y1-y2,b=x2-x1,c=x1y2-x2y1。对于直线上的点F(x,y)=0;对于直线上方的点F(x,y)0;对于直线下方的点F(x,y)0。因此,欲判前述Q在M的上方还是下方,只要把M代入F(x,y),并判断它的符号。构造判别式 d=F(M)=F(,)=a()+b()+c,当d0,则应取正右方的p1。当d=0是,二者一样合适,可以随便取一个。,我们约定取正右方的p1。对每一个象素计算判别式d,根据它的符号确定下一象素。由于d是xp和yp的线性函数,可采用增量计算,以便提高运算效率。,在d0的情况下,取正右方的象素p1,
8、欲判断再下一个象素应取哪个,应计算d1=F(+2,+0.5)=a(+2)+b(+0.5)+c=(a(+1)+b(+0.5)+c)+a=d+a故d的增量为a。,而若d0,则取右上方象素p2。要判断再下一个象素,则要计算d2=F(+2,+1.5)=a(+2)+b(+1.5)+c=(a(+1)+b(+0.5)+c)+a+b=d+a+b故在第二种情况,d的增量为ab。,再看d的初始值。显然,第一个象素应取左端点(x1,y1),相应的判别式值为d0=F(+1,+0.5)=a(+1)+b(+0.5)+c=(ax1+by1+c)+a+0.5b=F(x1,y1)+a+0.5b但由于(x1,y1)在直线上,故F
9、(x1,y1)=0。因此d的初始值为d0=a+0.5b,由于我们使用的只是d的符号,而且d的增量都是整数,只是其初始值包含小数。因此,我们可以用2d代替d,来摆脱小数,写出仅包含整数运算的算法:,void MidpointLine(x1,y1,x2,y2,color)int x1,y1,x2,y2,color;int a,b,d1,d2,dx,y;a=y1-y2;b=x2-x1;d=2*a+b;d1=2*a;d2=2*(a+b);x=x1;y=y1;,setpixel(x,y,color);while(xx2)If(d0)x+;y+d+=d2;elsex+;d+=d1;setpixel(x,y
10、,color);,2.1.3 Bresenham画线算法,算法分析,算法推导,可视化效果图,2.1.4 图形环境的设置,#include”graphics.h”图形方式初始化函数:initgraph(*gdriver,*gmode,*path);gdriver:是一个空型指针,用来指定要装入的图形驱动程序,该值在头文件中定义;gmode:是一个空型指针,用来指定显示模式path:图形驱动程序所在的路径,若用VGA图形驱动程序,图形显示模式为VGAHI,则调用方式如下:int gdriver,gmode;gdriver=VGA gmode=VGAHI initgraph(关闭图形方式函数为 cl
11、osegraph(),直线类绘图函数 line(x1,y1,x2,y2);lineto(x,y);moveto(x,y);line(dx,dy);几个直线段组成的图形,图一,图二,2.2 圆与椭圆的生成,由于圆是图形和图像中经常使用的元素,因此在大多数图形软件中都包含有生成圆和圆弧的过程。也会提供一个既能显示圆曲线,又能显示椭圆曲线的绘图函数。2.2.1圆的特性 圆被定义为所有离一中心位置(xc,yc)距离为给定值r的点集,可用如下方程式表示:(x-xc)2+(y-yc)2=r2,利用这个方程,我们可以沿x轴从xc-r到xc+r以单位步长计算对应的y值来得到圆周上每点的位置:y=yc(r2-(
12、xc-x)2)但这并非是生成圆的最好方法。这个方法的第一个问题是每一步包含很大的计算量。,第二个问题是所画像素位置间的间距是不一样的,在靠近x轴的0o180o处像素点之间的间距越来越大。当然可以在圆斜率的绝对值大于1后,交换x和y(即步进y值,计算x 值)来调整间距。但这样增加了算法所需的计算量和处理过程。,另一种消除不等间距的方法是使用极坐标r和来计算沿圆周的点。以参数极坐标形式表示圆方程可得到方程组:,使用上述方法以固定角度为步长生成显示时,圆就可沿圆周等距点绘制出来。但这个方法使用了三角函数调用和浮点运算,运算速度太慢。必须寻找只需做一些简单的 整数运算和判别运算的方法即可确定圆上的象素
13、点的算法。,考虑到圆的对称性可以减少计算量。只要能生成8分圆,那么圆的其它部分可以通过一系列的简单映射变换得到。如图所示,假设已知一个圆心在原点的圆上一点(x,y),,根据对称性可得另外七个8分圆上的对应点(y,x),(y,-x),(x,-y),(-x,-y),(-y,-x),(-y,x),(-x,y)。因此,只需讨论8分圆的生成算法。,另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。,2.2.2中点画圆法,考虑中心在原点,半径为R的圆的第二8
14、分圆。我们来讨论如何从(0,R)到(R/),(R/)顺时针的确定最佳逼近于该圆弧的像素序列。,假定当前已确定了一个象素点为 p(xp,yp)那么 下一个象素只能是正右方的p1(xp+1,yp)或右下方的p2(xp+1,yp-1)。,如图所示,构造函数:F(x,y)=x2+y2-R2对于圆上的点,F(x,y)=0;对于圆外的点,F(x,y)0;而对于圆内的点F(x,y)0.假设M是P1和P2的中点,即M(xp+1,yp-0.5),那么当F(M)0时,p2离圆弧更近,应取p2。当F(M)=0时,在p1与p2之中随便取一个即可,我们约定取p2,与中点画线法一样,构造判别式 d=F(M)=F(xp+1
15、,yp-0.5)=(xp+1)2+(yp-0.5)2-R2当d0,则应取p1为下一象素,而且再下一个象素的判别式为 d=F(xp+2,yp-0.5)=(xp+2)2+(yp-0.5)2-R2=d+2xp+3,p1,所以,沿正右方,d的增量为2xp+3。而若d0,则p2是下一象素,而且下一象素的判别式为:d=F(xp+2,yp-1.5)=(xp+2)2+(yp-1.5)2-R2=d+(2xp+3)+(-2yp+2)=d+2(xp-yp)+5,所以,沿右下方向判别式 d的增量为2(xp-yp)+5。由于我们这里讨论的是用顺时针方向生成第二个8分圆,因此第一个象素点是(0,R)判别式d的初值为:d0
16、=F(1,R-0.5)=1+(R-0.5)2-R2=1.25-R,由于使用了浮点数来表示判别式d,为了简化运算,摆脱浮点数,在算法中全部使用整数,我们使用e=d-0.25代替d。显然,初始化运算d=1.25-r对应于e=1-r。判别式d0对应于e-0.25。,算法中其它与d有关的式子可把d直接换成e。又由于d的初值为整数,且在运算过程中的增量也是整数,故e始终是整数,所以e-0.25等价于e0。至此,可以写出完全用整数实现的中点画圆算法。算法中e仍用d来表示,圆算法演示,椭圆算法演示,上述算法还可以进一步改进,以提高效率。注意到判别式d 的增量是x,y的线性函数,每当x递增1,d递增x=2。每
17、当y递减1,d递增y=2。由于初始象素为(0,r),所以x的初值为3,y的初值为-2r+2。,再注意到乘2运算可以改用加法实现,因此可写出不含乘法,仅用整数实现的中点画圆算法。读者可自己修改此算法。,画圆函数,circle(x,y,r);x,y为圆心坐标,r为半径ellipse(x,y,as,ae,rx,ry)说明:x,y为椭圆的中心坐标;as,ae为椭圆弧的起始角和终止角度;rx,ry为x方向和y 方向的半轴长arc(x,y,as,ae,r)说明:x,y为圆心坐标;as,ae为圆弧起始角和终止角,r为半径,由弧组成的图形,圆环,肾形,一、图形的基本要素及其表示方法 体是由若干面构成,而面则由
18、曲线组成,线是点的轨迹。因此构成图形的基本要素是点。,第三章 图形几何变换,第一节 几何变换的方法,在解析几何中,点可以用向量表示。在二维空间中可以用(x,y)表示平面上的一点,在三维空间中则用(x,y,z)表示空间一点。因此,可以用点的集合(点集)来表示一个平面图形或三维立体,写成矩阵的形式为:,x1 y1X2 y2xn yn,x1 y1 z1x2 y2 z2 zn yn xn,这样便建立了平面图形和空间立体的数学模型。,(x1,y1),(x2,y2),(x3,y3),(x4,y4),x1 y1X2 y2X3 y3X4 y4,平面图形,二 点的变换,在计算机图形学应用中,常常要进行诸如比例,
19、对称,旋转,平移,投影等各种变换,既然图形可以用点集来表示,也就是说点集定了,则图形也就确定了。那么,如果点的位置改变了,图形也就随之改变。因此,要对图形进行变换,只要变换点就可以了。,由于点集可用矩阵的方式来表示,因此对点的变换可以通过相应的矩阵运算来实现,即:旧点集 x 变换矩阵新点集,变换的基础是矩阵乘法。规则 Aik*Bkj=Cij,第二节二维基本变换,a b若(x,y)为变换前的坐标,c d 为变换矩阵,则有:(x,y)a b=(ax+cy,bx+dy)=(x,y)c d这里(x,y)为变换后的坐标。变换矩阵中a,b,c,d可取不同值,可以实现各种不同的变换,从而达到对图形进行变换的
20、目的。,一 比例变换,在变换矩阵中 中,令b=c=0,则比例变换矩阵:其中 a,d分别为x,y方向上的比例因子(a,d0)。讨论:若a=d=1,为恒等变换,即变换后点的坐标不变。若a=d1,则为等比变换,变换结果是图形等比例放大(a=d1)后等比例缩小(a=d1)。如下图(1)所示,原三角形ABC给放大2倍后为三角形ABC。,x y,ABC,ABC,10,20,30,10,20,30,40,A,B,C,A,C,B,(1),40,x y,10,20,30,40,10,20,30,40,若 a d,则变换后图形将变形,如图(2),原三角形ABC经下式变换后成为ABC,x,y,ABC,ABC,(2)
21、,二.对称变换,1.对坐标轴的对称变换 点对x轴对称变换有:x=x,y=-y,变换矩阵为:即 点对y轴对称应有:x=-x,y=y,则变换矩阵为:即,对坐标轴变换后的图形见下图(1),10,20,10,20,(1),2.对原点对称变换,点对坐标原点对称变换应有:x=-x,y=-y,则变换矩阵 即变换的 图形见下图,A,C,3.对45线的对称变换,点对45线的对称变换即让x,y互换坐标,x=y,y=x,变换矩阵为:即:对-45线的对称变换,应有x=-y,y=-x,变换矩阵为:,对+45和-45的对称变换的图形如下图:,三.错切变换,令,且 c,b之一为0,则,1.沿x轴错切令b=0,沿x向错切的变
22、换矩阵为:,则,经此变换后,y坐标不变,x坐标有一增量cy,这就相当于原来平行于y轴的线向x方向错切成与y轴成角的直线,且有tg=y/cy=1/c。当c0时沿+x向错切;c0时,沿-x向错切。设c=2,对三角形ABC进行错切变换得:,ABC,ABC,x y,2.沿y轴方向错切令 c=0,则,,x y,设b=2,对三角形ABC进行错切变换得:,ABC,ABC,x y,x y,变换的结果是,x坐标不变,而y坐标产生一增量bx,使原来平行于x轴的线倾斜角且 tg=x/bx=1/b。当b0时,沿+y方向错切;b0时,沿-y方向错切。,四.旋转变换,假定图形的旋转是绕坐标原点旋转角,逆时针方向为正,顺时
23、针方向为负,变换矩阵则对点进行旋转变换:,对三角形ABC进行旋转变换(=60):,ABC,x y,x y,ABC,五、平移变换与齐次坐标上述四种变换都可以通过变换矩阵那么它是否适合于平移变换呢?若实现平移变换,变换前后的坐标必须满足下面的关系:,x=x+x y=y+y这里x,y是平移量,应为常量,但是应用上述变换对点进行变换:,这里的cy,bx均为非常量,因此用原来的2X2的变换矩阵是无法实现平移变换的。我们把2X2矩阵扩充成3X2矩阵,即令:,K,m是平移量。这样又带来新的问题,二维图形的点集矩阵是nx2的,而变换矩阵是3x2的,根据矩阵乘法的规则,他们是无法相乘的。为此,我们把点向量也做扩
24、充,将(x,y)扩充为(x,y,1),即把点集矩阵扩充为nx3阶矩阵。这样,点集矩阵与变换矩阵即可进行乘法运算。,令变换矩阵中b、c=0,a、d=1,就得到平移变换矩阵,则有这里k,m分别为x,y方向的平移量。,为了使二维变换矩阵具有更多的功能,可将3x2变换矩阵进一步扩充为3x3阶矩阵,即,则平移变换矩阵为:如令k=10,m=10,对三角形ABC做平移变换,得:,ABC,x y,ABC,20,10,10,20,A,B,C,A,B,C,在上述讨论中,我们将(x,y)扩充为(x,y,1),实际上是由二维向量变为三维向量,但(x,y,1)可以看作是z=1平面上的点,也就是说,经此扩充后,图形落在z
25、=1的平面上,它对图形的形状没有影响。这种用三维向量表示二维向量的方法叫做齐次坐标法。进一步推广,用n-1维向量表示n维向量的方法称之为齐次坐标法。,二维变换实例,图形顶点表,图形连边表,1,2,3,4,5,6,7,8,第三节 二维组合变换,上述的五种变换可用统一的变换矩阵形式实现,我们把它们叫做基本变换。但是有些变换仅用一种基本变换是不能实现的,必须由两种或更多种基本变换组合才能实现。这种由多种基本变换组合而成的变换称之为组合变换,相应的变换矩阵叫做组合变换矩阵。,一、绕任意点旋转变换,平面图形绕任意点p(Xp,Yp)旋转角,需要通过以下几个步骤来实现:(1)将旋转中心平移到原点,变换矩阵为
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 完整 课件
链接地址:https://www.desk33.com/p-619982.html