计算机图形学完整.pptx
《计算机图形学完整.pptx》由会员分享,可在线阅读,更多相关《计算机图形学完整.pptx(326页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第一章、绪论1.1、概述1.2、计算机图形学的发展1.3、计算机图形学的应用1.4、计算机图形系统1.5、计算机图形标准第1页/共326页1.1 概述计算机图形学的概念 计算机图形学Computer Graphics 是一门新兴学科,国际标准化组织ISO定义为:计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论,应用数学及计算机科学基础上的一门边缘学科。第2页/共326页计算机图形学的研究内容 1.基于图形设备的基本图形元素的生成算法。2.图形元素的几何变换。3.自由曲线和曲线的插值、拟合、拼接、分解、过渡、光顺、整体和局部
2、修改等。4.三维几何造型技术。5.三维形体的实时显示。6.真实感图形的生成算法。7.山、水、花、草、烟云等模糊景物的模拟生成和虚拟现实环境的生成。8.科学计算可视化和三维或高维数据场的可视化。第3页/共326页计算机图形学与图象处理的关系 计算机图形学的基本含义是使用计算机通过算法和程序在显示设备上构造出图形来。也就是说,图形是人们通过计算机设计和构造出来的,不是通过摄象机和扫描仪等设备输入的图象。所设计和构造的图形可以是现实世界已经存在的物体的图形,也可以显示完全虚构的物体。因此,计算机图形学是真实的物体或虚构物体图形的综合技术。第4页/共326页 与此相反,图象处理是景物或图象的分析技术,
3、它所研究的是计算机图与此相反,图象处理是景物或图象的分析技术,它所研究的是计算机图形学的逆过程,图象增加、模式识别、景物分析、计算机视觉等,并研究如形学的逆过程,图象增加、模式识别、景物分析、计算机视觉等,并研究如何从图象中提取二维或三维物体的模型。何从图象中提取二维或三维物体的模型。第5页/共326页 尽管计算机图形学和图象处理所涉及的都是用计算机来处理图形和图尽管计算机图形学和图象处理所涉及的都是用计算机来处理图形和图象,但是长期以来却属于不同的两个技术领域。近年来,由于多媒体技术、象,但是长期以来却属于不同的两个技术领域。近年来,由于多媒体技术、计算机动画、三维空间数据场显示及纹理映射等
4、的迅速发展,计算机图形计算机动画、三维空间数据场显示及纹理映射等的迅速发展,计算机图形学和图象处理的结合日益紧密,并相互渗透。学和图象处理的结合日益紧密,并相互渗透。第6页/共326页1.2 计算机图形学的发展计算机图形学的发展简史年代准备阶段年代发展阶段年代推广应用阶段年代系统实用化阶段年代标准化智能化阶段第7页/共326页计算机图形学的发展方向 造型技术的发展 真实图形生成技术的发展 人机交互技术的发展 模拟艺术的仿真 计算机动画第8页/共326页1.3 计算机图形学的应用1.用户接口2.计算机辅助设计与制造(CAD/CAM)3.地形地貌和自然资源图4.计算机动画和艺术5.科学计算可视化6
5、.游戏第9页/共326页1.4 计算机图形系统 计算机图形系统硬件 计算机图形系统软件 计算机图形显示原理 光栅扫描式图形显示器第10页/共326页1.5 计算机图形标准GKS PHIGS CGM CGI第11页/共326页第二章、基本图形生成原理2.1 直线的生成2.2 圆与椭圆的生成第12页/共326页2.1 直线的生成数值微分法(DDA法)中点画线法画线算法图形函数介绍第13页/共326页数值微分法:直线方程 y=kx+b 给出线段的两个端点 (x1,y 1)和(x2,y2)可以算出k和b k=y/x=(y2-y1)/(x2-x1)b=y1-kx1再用setpixel(x,int(y0.
6、5),color)输出该系统的颜色值便可画出直线.但是画线效率太低,这是因为每步都需浮点乘法运算和一个四舍五入.第14页/共326页数值微分算法的描述 对任何沿直线给定的x的增量x,可以从下中计算出y的增量 y=kx 同样可以得出对应于指定的 x=y/k 当对于斜率的绝对值|k|1的线段怎么实现呢?算法演示第15页/共326页中点画线法 那么,下一个与直线最近的像素只能是正右方那么,下一个与直线最近的像素只能是正右方的的p1(p1(,)或右上方或右上方 p2p2(,)用空心小圆表示。再以用空心小圆表示。再以MM表示表示P1P1与与p2p2的中点,的中点,即即M=M=(,)。又设)。又设Q Q是
7、理想直线与是理想直线与垂线垂线 交点。显然,若交点。显然,若MM在在Q Q的下方,的下方,则则p2p2离直线近,应取为下一个像素;否则应取离直线近,应取为下一个像素;否则应取p1p1。这就是中点画线法的基本原理。这就是中点画线法的基本原理。为了讨论方便,这里假定直线斜率在为了讨论方便,这里假定直线斜率在0-10-1之之间,其它两种情况可参照下述讨论进行相应间,其它两种情况可参照下述讨论进行相应处理。处理。如图所示,若直线在如图所示,若直线在x x方向增加一个单位,方向增加一个单位,则在则在y y方向的增量只能在方向的增量只能在0-10-1之间。假设直线之间。假设直线上当前已确定的一个像素点坐标
8、为(上当前已确定的一个像素点坐标为(x xp p,y yp p),用实心小圆表示。),用实心小圆表示。P=(xp,yp)G第16页/共326页算法推导:下面我们来讨论中点画线算法的实现。假设直线的起点和终点分别为(x1,y1)和(x2,y2)则直线方程为 F(x,y)=ax+by+c=0 第17页/共326页 其中,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()+
9、c第18页/共326页当d0,则应取正右方的p1。当d=0是,二者一样合适,可以随便取一个。第19页/共326页 我们约定取正右方的p1。对每一个象素计算判别式d,根据它的符号确定下一象素。由于d是xp和yp的线性函数,可采用增量计算,以便提高运算效率。第20页/共326页 在在d0d0的情况下,取正右方的象素的情况下,取正右方的象素p1p1,欲判断再下一个象素应取哪个,应计算,欲判断再下一个象素应取哪个,应计算d1=F(+2,+0.5)d1=F(+2,+0.5)=a(+2)+b(+0.5)+c =a(+2)+b(+0.5)+c =(a(+1)+b(+0.5)+c)+a =(a(+1)+b(+
10、0.5)+c)+a =d+a =d+a故故d d的增量为的增量为a a。第21页/共326页而若而若d0d0,则取右上方象素,则取右上方象素p2p2。要判断再下一个象素,则要计算。要判断再下一个象素,则要计算d2=F(+2,+1.5)d2=F(+2,+1.5)=a(+2)+b(+1.5)+c =a(+2)+b(+1.5)+c =(a(+1)+b(+0.5)+c)+a+b =(a(+1)+b(+0.5)+c)+a+b =d+a+b =d+a+b故在第二种情况,故在第二种情况,d d的增量为的增量为a ab b。第22页/共326页 再看再看d d的初始值。显然,第一个象素应取左端点(的初始值。显
11、然,第一个象素应取左端点(x1x1,y1y1),相应的判别式值为),相应的判别式值为d d0 0=F(+1,+0.5)=F(+1,+0.5)=a(+1)+b(+0.5)+c =a(+1)+b(+0.5)+c =(a =(a x1+bx1+b y1+c)+a+0.5y1+c)+a+0.5 b b =F(x1,y1)+a+0.5 =F(x1,y1)+a+0.5 b b但由于(但由于(x1,y1x1,y1)在直线上,故)在直线上,故F(x1,y1)=0F(x1,y1)=0。因此因此d d的初始值为的初始值为d0=a+0.5d0=a+0.5 b b第23页/共326页 由于我们使用的只是由于我们使用的
12、只是d d的符号,而且的符号,而且d d的增量都是整数,只是其的增量都是整数,只是其初始值包含小数。因此,我们可以用初始值包含小数。因此,我们可以用2d2d代替代替d d,来摆脱小数,写出仅,来摆脱小数,写出仅包含整数运算的算法:包含整数运算的算法:第24页/共326页void MidpointLine(x1,y1,x2,y2,color)void MidpointLine(x1,y1,x2,y2,color)int x1,y1,x2,y2,color;int x1,y1,x2,y2,color;int a,b,d1,d2,dx,y;int a,b,d1,d2,dx,y;a=y1-y2;a=y
13、1-y2;b=x2-x1;b=x2-x1;d=2*a+b;d=2*a+b;d1=2*a;d1=2*a;d2=2*(a+b);d2=2*(a+b);x=x1;x=x1;y=y1;y=y1;setpixel(x,y,color);setpixel(x,y,color);while(xx2)while(xx2)If(d0)If(d0)x+;y+d+=d2;x+;y+d+=d2;elseelsex+;d+=d1;x+;d+=d1;setpixel(x,y,color);setpixel(x,y,color);第25页/共326页画线算法算法分析第26页/共326页算法推导第27页/共326页可视化效果
14、图第28页/共326页图形环境的设置#include”graphics.h”图形方式初始化函数:initgraph(*gdriver,*gmode,*path);gdriver:是一个空型指针,用来指定要装入的图形驱动程序,该值在头文件中定义;gmode:是一个空型指针,用来指定显示模式path:图形驱动程序所在的路径第29页/共326页若用VGA图形驱动程序,图形显示模式为VGAHI,则调用方式如下:int gdriver,gmode;gdriver=VGA gmode=VGAHI initgraph(&gdriver,&gmode,”c:TC”);关闭图形方式函数为 closegraph(
15、)第30页/共326页直线类绘图函数 line(x1,y1,x2,y2);lineto(x,y);moveto(x,y);line(dx,dy);几个直线段组成的图形图一图二第31页/共326页2.2 圆与椭圆的生成 由于圆是图形和图像中经常使用的元素,因此在大多数图形软件中都包含有生成圆和圆弧的过程。也会提供一个既能显示圆曲线,又能显示椭圆曲线的绘图函数。圆的特性 圆被定义为所有离一中心位置(xc ,yc)距离为给定值r的点集,可用如下方程式表示:(x-xc)2+(y-yc)2=r2第32页/共326页 利用这个方程,我们可以沿x轴从xc-r到xc+r以单位步长计算对应的y值来得到圆周上每点
16、的位置:y=yc (r2-(xc-x)2)但这并非是生成圆的最好方法。这个方法的第一个问题是每一步包含很大的计算量。第33页/共326页 第二个问题是所画像素位置间的间距是不一样的,在靠近x轴的0o180o处像素点之间的间距越来越大。当然可以在圆斜率的绝对值大于1后,交换x和y(即步进y值,计算x 值)来调整间距。但这样增加了算法所需的计算量和处理过程。第34页/共326页 另一种消除不等间距的方法是使用极坐标另一种消除不等间距的方法是使用极坐标r r和和 来计算沿圆周的点。来计算沿圆周的点。以参数极坐标形式表示圆方程可得到方程组:以参数极坐标形式表示圆方程可得到方程组:x=xc+r cosy
17、=yc+r sin第35页/共326页 使用上述方法以固定角度为步长生成显示时,圆就可沿圆周等距点绘制出来。但这个方法使用了三角函数调用和浮点运算,运算速度太慢。必须寻找只需做一些简单的 整数运算和判别运算的方法即可确定圆上的象素点的算法。第36页/共326页考虑到圆的对称性可考虑到圆的对称性可以减少计算量。只要以减少计算量。只要能生成能生成8 8分圆,那么圆分圆,那么圆的其它部分可以通过的其它部分可以通过一系列的简单映射变一系列的简单映射变换得到。如图所示,换得到。如图所示,假设已知一个圆心在假设已知一个圆心在原点的圆上一点原点的圆上一点(x(x,y)y),第37页/共326页 根据对称性可
18、得另外七个根据对称性可得另外七个8 8分圆上的对应点分圆上的对应点 (y,x)(y,x),(y,-x)(y,-x),(x,-y)(x,-y),(-x,-y)(-x,-y),(-y,-x)(-y,-x),(-y,x)(-y,x),(-x,y)(-x,y)。因此,只需讨论因此,只需讨论8 8分圆的生成算法。分圆的生成算法。第38页/共326页 另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。第39页/共326页中点画圆法 考虑中心在原点,半径为R的
19、圆的第二8分圆。我们来讨论如何从(0,R)到(R/),(R/)顺时针的确定最佳逼近于该圆弧的像素序列。第40页/共326页假定当前已确定了一个象素点为假定当前已确定了一个象素点为 p(xp(xp p,y,yp p)那么那么 下一个象素只能是正右方的下一个象素只能是正右方的p1(xp1(xp p+1,y+1,yp p)或右下方的或右下方的p2(xp2(xp p+1,y+1,yp p-1)-1)。p1P=(x,y)xp xp+1 xp+2ypyp-1yp-2p2M第41页/共326页如图所示,构造函数:如图所示,构造函数:F(x,y)=xF(x,y)=x2 2+y+y2 2-R-R2 2对于圆上的
20、点,对于圆上的点,F(x,y)=0;F(x,y)=0;对于圆外的点,对于圆外的点,F(x,y)F(x,y)0;0;而对于圆内的点而对于圆内的点F(x,y)F(x,y)0.0.假设假设MM是是P1P1和和P2P2的中点,的中点,即即MM(x xp p+1,y+1,yp p-0.5-0.5)P=(x,y)xp xp+1 xp+2p2Mypyp-1yp-2p1第42页/共326页那么那么当当F(M)0F(M)0F(M)0时,时,p2p2离圆弧更近,应取离圆弧更近,应取p2p2。当当F(M)=0F(M)=0时,在时,在p1p1与与p2p2之中随便取一个即之中随便取一个即可,我们约定取可,我们约定取p2
21、p2P=(x,y)xp xp+1 xp+2p2Mypyp-1yp-2p1第43页/共326页与中点画线法一样,构造判别式与中点画线法一样,构造判别式 d=F(M)d=F(M)=F(x =F(xp p+1,y+1,yp p-0.5)-0.5)=(x =(xp p+1)+1)2 2+(y+(yp p-0.5)-0.5)2 2-R-R2 2当当d0d0,则应取,则应取p1p1为下一象素,而且再下一个为下一象素,而且再下一个象素的判别式为象素的判别式为 d=F(xd=F(xp p+2,y+2,yp p-0.5)-0.5)=(x =(xp p+2)2+(y+2)2+(yp p-0.5)-0.5)2 2-
22、R-R2 2 =d+2x =d+2xp p+3+3p1P=(x,y)xp xp+1 xp+2p2Mypyp-1yp-2第44页/共326页所以,沿正右方,所以,沿正右方,d d的增量为的增量为2x2xp p+3+3。而若而若d0d0,则,则p2p2是下一象素,而且下一象素的是下一象素,而且下一象素的判别式为判别式为:d=F(x d=F(xp p+2,y+2,yp p-1.5)-1.5)=(x =(xp p+2)+2)2 2+(y+(yp p-1.5)-1.5)2 2-R-R2 2 =d+(2x =d+(2xp p+3)+(-2y+3)+(-2yp p+2)+2)=d+2(xp-yp)+5P=(
23、x,y)xp xp+1 xp+2p2Mypyp-1yp-2p1第45页/共326页所以,沿右下方向判别式所以,沿右下方向判别式 d d的增量为的增量为2(x2(xp p-y-yp p)+5)+5。由于我们这里讨论的是用顺时针方向生成第二个由于我们这里讨论的是用顺时针方向生成第二个8 8分圆,因此第一个象素分圆,因此第一个象素点是点是(0,R)(0,R)判别式判别式d d的初值为:的初值为:d d0 0=F(1,R-0.5)=F(1,R-0.5)=1+(R-0.5)=1+(R-0.5)2 2-R-R2 2 =1.25-R =1.25-R第46页/共326页 由于使用了浮点数来表示判别式由于使用了
24、浮点数来表示判别式d d,为了简化运算,摆脱浮点数,在,为了简化运算,摆脱浮点数,在算法中全部使用整数,我们使用算法中全部使用整数,我们使用e=d-0.25e=d-0.25代替代替d d。显然,初始化运算。显然,初始化运算d=1.25-rd=1.25-r对应于对应于e=1-re=1-r。判别式。判别式d0d0对应于对应于e-0.25e-0.25。第47页/共326页 算法中其它与算法中其它与d d有关的式子可把有关的式子可把d d直接换成直接换成e e。又由于。又由于d d的初值为整数,且的初值为整数,且在运算过程中的增量也是整数,故在运算过程中的增量也是整数,故e e始终是整数,所以始终是整
25、数,所以e-0.25e-0.25等价于等价于e0e0)。讨论:若a=d=1,为恒等变换,即变换后点的坐标不变。若a=d1,则为等比变换,变换结果是图形等比例放大(a=d1)后等比例缩小(a=d0c0时沿时沿+x+x向错切;向错切;c0c0b0时,沿时,沿+y+y方向错切;方向错切;b0b0n0),以使其与正投影面处于同一平面,使水平投影图和正面投影图拉开一个距),以使其与正投影面处于同一平面,使水平投影图和正面投影图拉开一个距离离,变换过程为:第114页/共326页 变换结果为(x,y,z,1)*Th=(x,0,-y-d3,1)=(x,y,z,1)第115页/共326页 设立体图的点集矩阵为(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 图形学 完整
限制150内