计算机图形学完整课件资料

上传人:E**** 文档编号:100351368 上传时间:2019-09-23 格式:PPT 页数:326 大小:4.24MB
返回 下载 相关 举报
计算机图形学完整课件资料_第1页
第1页 / 共326页
计算机图形学完整课件资料_第2页
第2页 / 共326页
计算机图形学完整课件资料_第3页
第3页 / 共326页
计算机图形学完整课件资料_第4页
第4页 / 共326页
计算机图形学完整课件资料_第5页
第5页 / 共326页
点击查看更多>>
资源描述

《计算机图形学完整课件资料》由会员分享,可在线阅读,更多相关《计算机图形学完整课件资料(326页珍藏版)》请在金锄头文库上搜索。

1、计算机图形学,第一章、绪论 第二章、基本图形生成原理 第三章、图形几何变换 第四章、多边形及多边形填充算法 第五章、图案及动画程序设计 第六章、裁剪算法 第七章、自由曲线,第一章、绪论,1.1 、概述 1.2 、计算机图形学的发展 1.3 、计算机图形学的应用 1.4 、计算机图形系统 1.5 、计算机图形标准,1.1 概述,1.1.1 计算机图形学的概念 计算机图形学Computer Graphics 是一门新兴学科,国际标准化组织ISO定义为: 计算机图形学是一门研究通过计算机将数据转换成图形,并在专门显示设备上显示的原理方法和技术的学科。它是建立在传统的图学理论,应用数学及计算机科学基础

2、上的一门边缘学科。,1.1.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 圆与

5、椭圆的生成,2.1 直线的生成,2.1.1 数值微分法(DDA法) 2.1.2 中点画线法 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

6、 同样可以得出对应于指定的 x= y/k 当对于斜率的绝对值|k|1的线段怎么实现呢?,算法演示,2.1.2 中点画线法,那么,下一个与直线最近的像素只能是正右方的p1( , )或右上方 p2( , )用空心小圆表示。再以M表示P1与p2的中点,即M=( , )。又设Q是理想直线与垂线 交点。显然,若M在Q的下方,则p2离直线近,应取为下一个像素;否则应取p1。这就是中点画线法的基本原理。,为了讨论方便,这里假定直线斜率在0-1之间,其它两种情况可参照下述讨论进行相应处理。 如图所示,若直线在x方向增加一个单位,则在y方向的增量只能在0-1之间。假设直线上当前已确定的一个像素点坐标为(xp,y

7、p),用实心小圆表示。,G,算法推导: 下面我们来讨论中点画线算法的实现。假设直线的起点和终点分别为(x1,y1)和(x2,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。 对每一个象

8、素计算判别式d,根据它的符号确定下一象素。由于d是xp和yp的线性函数,可采用增量计算,以便提高运算效率。,在d0的情况下,取正右方的象素p1,欲判断再下一个象素应取哪个,应计算 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

9、,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(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;

10、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; else x+;d+=d1; setpixel(x,y,color); ,2.1.3 Bresenham 画线算法,算法分析,算法推导,可视化效果图,2.1.4 图形环境的设置,#include”graphics.h” 图形方式初始化函数: initgraph(*gdriver,*gmode,*path); gdriver:是一个空型指针,用来指定要装入的图形驱动程序,该值在头文件中定义; gmode:是一个空型

11、指针,用来指定显示模式 path:图形驱动程序所在的路径,若用VGA图形驱动程序,图形显示模式为VGAHI, 则调用方式如下: int gdriver,gmode; gdriver=VGA gmode=VGAHI initgraph( 关闭图形方式函数为 closegraph(),直线类绘图函数 line(x1,y1,x2,y2); lineto(x,y); moveto(x,y); line(dx,dy); 几个直线段组成的图形,图一,图二,2.2 圆与椭圆的生成,由于圆是图形和图像中经常使用的元素,因此在大多数图形软件中都包含有生成圆和圆弧的过程。也会提供一个既能显示圆曲线,又能显示椭圆曲

12、线的绘图函数。 2.2.1圆的特性 圆被定义为所有离一中心位置(xc ,yc)距离为给定值r的点集,可用如下方程式表示: (x-xc)2+(y-yc)2=r2,利用这个方程,我们可以沿x轴从xc-r到xc+r以单位步长计算对应的y值来得到圆周上每点的位置: y=yc (r2-(xc-x)2) 但这并非是生成圆的最好方法。这个方法的第一个问题是每一步包含很大的计算量。,第二个问题是所画像素位置间的间距是不一样的,在靠近x轴的0o180o处像素点之间的间距越来越大。 当然可以在圆斜率的绝对值大于1后,交换x和y(即步进y值,计算x 值)来调整间距。但这样增加了算法所需的计算量和处理过程。,另一种消

13、除不等间距的方法是使用极坐标r和来计算沿圆周的点。以参数极坐标形式表示圆方程可得到方程组:,使用上述方法以固定角度为步长生成显示时,圆就可沿圆周等距点绘制出来。但这个方法使用了三角函数调用和浮点运算,运算速度太慢。 必须寻找只需做一些简单的 整数运算和判别运算的方法即可确定圆上的象素点的算法。,考虑到圆的对称性可 以减少计算量。只要 能生成8分圆,那么圆 的其它部分可以通过 一系列的简单映射变 换得到。如图所示, 假设已知一个圆心在 原点的圆上一点(x,y),,根据对称性可得另外七个8分圆上的对应点 (y, x),(y, -x), (x, -y),(-x,-y), (-y,-x),(-y, x

14、), (-x, y)。 因此,只需讨论8分圆的生成算法。,另外,为了方便起见,我们只考虑中心在原点,半径为整数R的圆x2+y2=R2。对于中心不在原点的圆,可先通过平移变换,化为中心在原点的圆,再进行扫描转换,把所得的像素坐标加上一个位移量即得所求像素坐标。,2.2.2中点画圆法,考虑中心在原点,半径为R的圆的第二8分圆。我们来讨论如何从 (0,R)到(R/ ),(R/ )顺时针的确定最佳逼近于该圆弧的像素序列。,假定当前已确定了一个象素点为 p(xp,yp) 那么 下一个象素只能是正右方的p1(xp+1,yp) 或右下方的p2(xp+1,yp-1)。,如图所示,构造函数: F(x,y)=x2

15、+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, 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=F(1,R-0.5) =1+(R-0.5)2-R2 =1.25-R,由于使

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号