计算机图形学完整课件PPT文件格式下载.ppt
《计算机图形学完整课件PPT文件格式下载.ppt》由会员分享,可在线阅读,更多相关《计算机图形学完整课件PPT文件格式下载.ppt(326页珍藏版)》请在冰豆网上搜索。
![计算机图形学完整课件PPT文件格式下载.ppt](https://file1.bdocx.com/fileroot1/2022-10/22/fb65c7dc-bb15-4162-a540-06644254acd1/fb65c7dc-bb15-4162-a540-06644254acd11.gif)
1.1.3计算机图形学与图象处理的关系计算机图形学的基本含义是使用计算机通过算法和程序在显示设备上构造出图形来。
也就是说,图形是人们通过计算机设计和构造出来的,不是通过摄象机和扫描仪等设备输入的图象。
所设计和构造的图形可以是现实世界已经存在的物体的图形,也可以显示完全虚构的物体。
因此,计算机图形学是真实的物体或虚构物体图形的综合技术。
与此相反,图象处理是景物或图象的分析技术,它所研究的是计算机图形学的逆过程,图象增加、模式识别、景物分析、计算机视觉等,并研究如何从图象中提取二维或三维物体的模型。
尽管计算机图形学和图象处理所涉及的都是用计算机来处理图形和图象,但是长期以来却属于不同的两个技术领域。
近年来,由于多媒体技术、计算机动画、三维空间数据场显示及纹理映射等的迅速发展,计算机图形学和图象处理的结合日益紧密,并相互渗透。
1.2计算机图形学的发展1.2.1计算机图形学的发展简史年代准备阶段年代发展阶段年代推广应用阶段年代系统实用化阶段年代标准化智能化阶段1.2.2计算机图形学的发展方向造型技术的发展真实图形生成技术的发展人机交互技术的发展模拟艺术的仿真计算机动画1.3计算机图形学的应用1.用户接口2.计算机辅助设计与制造(CAD/CAM)3.地形地貌和自然资源图4.计算机动画和艺术5.科学计算可视化6.游戏1.4计算机图形系统计算机图形系统硬件计算机图形系统软件计算机图形显示原理光栅扫描式图形显示器1.5计算机图形标准GKSPHIGSCGMCGI第二章、基本图形生成原理2.1直线的生成2.2圆与椭圆的生成2.1直线的生成2.1.1数值微分法(DDA法)2.1.2中点画线法2.1.3Bresenham画线算法2.1.4Turboc2.0图形函数介绍2.1.1数值微分法:
直线方程y=kx+b给出线段的两个端点(x1,y1)和(x2,y2)可以算出k和bk=y/x=(y2-y1)/(x2-x1)b=y1-kx1再用setpixel(x,int(y0.5),color)输出该系统的颜色值便可画出直线.但是画线效率太低,这是因为每步都需浮点乘法运算和一个四舍五入.数值微分算法的描述对任何沿直线给定的x的增量x,可以从下中计算出y的增量y=y=kkxx同样可以得出对应于指定的同样可以得出对应于指定的x=x=y/ky/k当对于斜率的绝对值|k|1的线段怎么实现呢?
算法演示2.1.2中点画线法那么,下一个与直线最近的像素只能是正右方的p1(,)或右上方p2(,)用空心小圆表示。
再以M表示P1与p2的中点,即M=(,)。
又设Q是理想直线与垂线交点。
显然,若M在Q的下方,则p2离直线近,应取为下一个像素;
否则应取p1。
这就是中点画线法的基本原理。
为了讨论方便,这里假定直线斜率在0-1之间,其它两种情况可参照下述讨论进行相应处理。
如图所示,若直线在x方向增加一个单位,则在y方向的增量只能在0-1之间。
假设直线上当前已确定的一个像素点坐标为(xp,yp),用实心小圆表示。
P=(xp,yp)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。
对每一个象素计算判别式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,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,来摆脱小数,写出仅包含整数运算的算法:
voidMidpointLine(x1,y1,x2,y2,color)intx1,y1,x2,y2,color;
inta,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;
2.1.3Bresenham画线算法算法分析算法推导可视化效果图2.1.4图形环境的设置#include”graphics.h”图形方式初始化函数:
initgraph(*gdriver,*gmode,*path);
gdriver:
是一个空型指针,用来指定要装入的图形驱动程序,该值在头文件中定义;
gmode:
是一个空型指针,用来指定显示模式path:
图形驱动程序所在的路径若用VGA图形驱动程序,图形显示模式为VGAHI,则调用方式如下:
intgdriver,gmode;
gdriver=VGAgmode=VGAHIinitgraph(&
gdriver,&
gmode,”c:
TC”);
关闭图形方式函数为closegraph()直线类绘图函数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-(xc-x)2)但这并非是生成圆的最好方法。
这个方法的第一个问题是每一步包含很大的计算量。
第二个问题是所画像素位置间的间距是不一样的,在靠近x轴的0o180o处像素点之间的间距越来越大。
当然可以在圆斜率的绝对值大于1后,交换x和y(即步进y值,计算x值)来调整间距。
但这样增加了算法所需的计算量和处理过程。
另一种消除不等间距的方法是使用极坐标r和来计算沿圆周的点。
以参数极坐标形式表示圆方程可得到方程组:
x=xc+rcosy=yc+rsin使用上述方法以固定角度为步长生成显示时,圆就可沿圆周等距点绘制出来。
但这个方法使用了三角函数调用和浮点运算,运算速度太慢。
必须寻找只需做一些简单的整数运算和判别运算的方法即可确定圆上的象素点的算法。
考虑到圆的对称性可以减少计算量。
只要能生成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分圆。
我们来讨论如何从(0,R)到(R/),(R/)顺时针的确定最佳逼近于该圆弧的像素序列。
假定当前已确定了一个象素点为p(xp,yp)那么下一个象素只能是正右方的p1(xp+1,yp)或右下方的p2(xp+1,yp-1)。
p1P=(x,y)xpxp+1xp+2ypyp-1yp-2p2M如图所示,构造函数:
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)P=(x,y)xpxp+1xp+2p2Mypyp-1yp-2p1那么当F(M)0时,p2离圆弧更近,应取p2。
当F(M)=0时,在p1与p2之中随便取一个即可,我们约定取p2P=(x,y)xpxp+1xp+2p2Mypyp-1yp-2p1与中点画线法一样,构造判别式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+3p1P=(x,y)xpxp+1xp+2p2Mypyp-1yp-2所以,沿正右方,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)+5P=(x,y)xpxp+1xp+2p2Mypyp-1yp-2p1所以,沿右下方向判别式d的增量为2(xp-yp)+5。
由于我们这里讨论的是用顺时针方向生成第二个8分圆,因此第一个象素点是(0,R)判别式d的初值为:
d0=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等价于e0d0)。
讨论:
)。
若若a=d=1a=d=1,为恒等变换,即变换后点的坐标不变。
,为恒等变换,即变换后点的坐标不变。
若若a=d1a=d1,则为等比变换,变换结果是图形等比例放大,则为等比变