湖经 计算机图形学考试重点.docx
《湖经 计算机图形学考试重点.docx》由会员分享,可在线阅读,更多相关《湖经 计算机图形学考试重点.docx(21页珍藏版)》请在冰豆网上搜索。
![湖经 计算机图形学考试重点.docx](https://file1.bdocx.com/fileroot1/2022-12/13/737f92c4-a3a0-4399-b2e8-0b8aa34cdae2/737f92c4-a3a0-4399-b2e8-0b8aa34cdae21.gif)
湖经计算机图形学考试重点
1.第一章:
几何属性,非几何属性等,计算机图形学和计算机图像处理、机器视觉、科学计算可视化等概念。
与平面图形形状及尺寸有关的几何量统称为平面图形的几何性质。
图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。
计算机图形学是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。
机器视觉就是用机器代替人眼来做测量和判断。
科学计算可视化的基本含义是运用计算机图形学或者一般图形学的原理和方法,将科学与工程计算等产生的大规模数据转换为图形、图象,以直观的形式表示出来。
2.第二章:
图形标准iges,step,nurbs曲线的应用标准和软件如maya,3dmax等。
初始图形交换规范(IGES)是一套美国国家标准,它使得图形和基本的几何数据可以在绘图和造型系统之间交换。
然而,几何交换仅仅是数据交换的一部分,产品数据涵盖许多图形和几何以外的东西。
因此,急需一种不依赖于任何系统的机制,它能够描述产品整个生命周期内的产品数据。
基于上述需求,开发了产品模型数据交换的标准(STEP),用于产品数据交换和共享的国际标准。
STEP(StandardfortheExchangeofProductModelData-产品模型数据交互规范)[1]标准是国际标准化组织制定的描述整个产品生命周期内产品信息的标准,STEP标准是一个正在完善中的“产品数据模型交换标准”。
NURBS是一种非常优秀的建模方式,在高级三维软件当中都支持这种建模方式。
NURBS能够比传统的网格建模方式更好地控制物体表面的曲线度,从而能够创建出更逼真、生动的造型。
3.第三章:
opengl(重点)
(1)熟练掌握下面的代码(GL_TRIANGLES与GL_LINES的差别会考到)
glBegin(GL_POINTS);
glVertex2f(1.0,1.0);
glVertex2f(2.0,1.0);
glVertex2f(2.0,2.0);
glEnd();
(2)会考到分形图形的生成:
比如生成树木、雪花、SIERPINSK三角形的生成的openggl代码(代码主体或完全可运行的代码均可)。
雪花
voiddrawline(doublex1,doubley1,doublex2,doubley2,intk)
{
doubleone_third_x=(2.0*x1+x2)/3.0;//点(x1,y1)与点(x2,y2)连线的1/3处x轴的坐标
doubleone_third_y=(2.0*y1+y2)/3.0;//点(x1,y1)与点(x2,y2)连线的1/3处y轴的坐标
doubletwo_third_x=(2.0*x2+x1)/3.0;//点(x1,y1)与点(x2,y2)连线的2/3处x轴的坐标
doubletwo_third_y=(2.0*y2+y1)/3.0;//点(x1,y1)与点(x2,y2)连线的2/3处y轴的坐标
doublem_point_x=0.2887*(double)(y1-y2)+(x1+x2)/2.0;//突凸出的顶点的x轴的坐标
doublem_point_y=0.2887*(double)(x2-x1)+(y1+y2)/2.0;//突凸出的顶点的y轴的坐标
if(k==0)
{//递归终止
glColor3f(1.0,m_point_x/400.0,m_point_y/400.0);//颜色随位置变化
glBegin(GL_LINE_STRIP);
glVertex2d(x1,y1);
glVertex2d(one_third_x,one_third_y);
glVertex2d(m_point_x,m_point_y);
glVertex2d(two_third_x,two_third_y);
glVertex2d(x2,y2);
glEnd();
}
else//递归调用
{
drawline(x1,y1,one_third_x,one_third_y,k-1);
drawline(one_third_x,one_third_y,m_point_x,m_point_y,k-1);
drawline(m_point_x,m_point_y,two_third_x,two_third_y,k-1);
drawline(two_third_x,two_third_y,x2,y2,k-1);
}
glFlush();
}
三角形
/*initialtriangle*/
GLfloatv[3][2]={{-1.0,-0.58},{1.0,-0.58},{0.0,1.15}};
intgCount=1;
/*specifyonetriangle*/
voidtriangle(GLfloat*a,GLfloat*b,GLfloat*c){
glVertex2fv(a);
glVertex2fv(b);
glVertex2fv(c);
}
/*trianglesubdivisionusingvertexnumbers*/
voiddivide_triangle(GLfloat*a,GLfloat*b,GLfloat*c,intm){
GLfloatv0[2],v1[2],v2[2];
intj;
if(m>0)
{
for(j=0;j<2;j++){
v0[j]=(a[j]+b[j])/2;
}
for(j=0;j<2;j++){
v1[j]=(a[j]+c[j])/2;
}
for(j=0;j<2;j++){
v2[j]=(b[j]+c[j])/2;
}
divide_triangle(a,v0,v1,m-1);
divide_triangle(c,v1,v2,m-1);
divide_triangle(b,v2,v0,m-1);
}
else{
triangle(a,b,c);/*drawtriangleatendofrecursion*/
}
}
voidinit(){
/*attributes*/
glClearColor(1.0,1.0,1.0,1.0);/*whitebackground*/
glColor3f(1.0,0.0,0.0);/*drawinred*/
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(-2.0,2.0,-2.0,2.0);
glMatrixMode(GL_MODELVIEW);
}
voidincreaseDisplay(){
if(gCount<=15){
gCount++;
}
sleep
(1);
glutPostRedisplay();
}
voiddisplay(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
divide_triangle(v[0],v[1],v[2],gCount);
glEnd();
glutSwapBuffers();
}
intmain(intargc,char*argv[]){
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB|GLUT_DOUBLE);
glutInitWindowSize(640,480);
glutInitWindowPosition(200,200);
glutCreateWindow("sierpinskigasket");
init();
glutDisplayFunc(display);
glutIdleFunc(increaseDisplay);
glutMainLoop();
return0;
}
4.第四章:
图形裁剪的c-s,s-h,w-a算法思路和应用范围
c-s算法思路
Cohen-Sutherland裁剪
该算法的思想是:
对于每条线段P1P2分为三种情况处理。
(1)若P1P2完全在窗口内,则显示该线段P1P2简称“取”之。
(2)若P1P2明显在窗口外,则丢弃该线段,简称“弃”之。
(3)若线段既不满足“取”的条件,也不满足“弃”的条件,则在交点处把线段分为两段。
其中一段完全在窗口外,可弃之。
然后对另一段重复上述处理。
为使计算机能够快速判断一条直线段与窗口属何种关系,采用如下编码方法。
延长窗口的边,将二维平面分成九个区域。
每个区域赋予4位编码CtCbCrCl。
其中各位编码的定义如下:
裁剪一条线段时,先求出P1P2所在的区号code1,code2。
若code1=0,且code2=0,则线段P1P2在窗口内,应取之。
若按位与运算code1&code2≠0,则说明两个端点同在窗口的上方、下方、左方或右方。
可判断线段完全在窗口外,可弃之。
否则,按第三种情况处理。
求出线段与窗口某边的交点,在交点处把线段一分为二,其中必有一段在窗口外,可弃之。
在对另一段重复上述处理。
在实现本算法时,不必把线段与每条窗口边界依次求交,只要按顺序检测到端点的编码不为0,才把线段与对应的窗口边界求交。
应用范围
比较适合两种情况:
一是大部分线段完全可见;二是大部分线段完全不可见
中点分割算法
中点分割算法的大意是,与前一种Cohen-Sutherland算法一样首先对线段端点进行编码,并把线段与窗口的关系分为三种情况:
全在、完全不在和线段和窗口有交。
对前两种情况,进行一样的处理。
对于第三种情况,用中点分割的方法求出线段与窗口的交点。
即从P0点出发找出距P0最近的可见点A和从P1点出发找出距P1最近的可见点B,两个可见点之间的连线即为线段P0P1的可见部分。
从P0出发找最近可见点采用中点分割方法:
先求出P0P1的中点Pm,若P0Pm不是显然不可见的,并且P0P1在窗口中有可见部分,则距P0最近的可见点一定落在P0Pm上,所以用P0Pm代替P0P1;否则取PmP1代替P0P1。
再对新的P0P1求中点Pm。
重复上述过程,直到PmP1长度小于给定的控制常数为止,此时Pm收敛于交点。
应用范围
主要计算过程只用到加法和除运算,效率高,也适合硬件实现。
w-a算法
梁友栋和Barskey提出了更快的参数化裁剪算法。
首先按参数化形式写出裁剪条件:
这四个不等式可以表示为形式:
upk≤qk
其中,参数pk,qk定义为:
任何平行于裁剪边界之一的直线pk=0,其中k对应于裁剪边界(k=1,2,3,4对应于左、右、下、上边界)如果还满足qk<0,则线段完全在边界外,舍弃该线段。
如果qk≥0,则该线段平行于裁剪边界并且在窗口内。
当pk<0,线段从裁剪边界延长线的外部延伸到内部。
当pk>0,线段从裁剪边界延长线的内部延伸到外部。
当pk≠0,可以计算出线段与边界k的延长线的交点的u值:
u=qk/pk。
对于每条直线,可以计算出参数u1和u2,它们定义了在裁剪矩形内的线段部分。
u1的值由线段从外到内遇到的矩形边界所决定(p<0)。
对这些边界计算rk=qk/pk。
u1取0和各个rk值之中的最大值。
u2的值由线段从内到外遇到的矩形边界所决定(p>0)。
对这些边界计算rk=qk/pk。
u2取1和各个rk值之中的最小值。
如果u1>u2,则线段完全落在裁剪窗口之外,被舍弃。
否则裁剪线段由参数u的两个值u1,u2计算出来
应用范围
确定图形中哪些部分落在显示区之内,哪些落在显示区之外,以便只显示落在显示区内的那部分图形。
5.第五章:
(1)2d,3d齐次坐标和矩阵,
(2)2d/3d平移、旋转和缩放变换矩阵,
(3)3d错切变换矩阵。
(4)重点会考到运动分解的”三段论“变换的步骤、数学公式、opengl代码。
比如
T1(a,b)R(theta)T2(-a,-b)的含义以及opengl代码.
(2)
2d平移:
设某点向x方向移动 dx, y方向移动 dy ,[x,y]为变换前坐标, [X,Y]为变换后坐标。
则 X = x+dx; Y = y+dy;
以矩阵表示:
1 0 0
[X, Y, 1] = [x, y, 1][ 0 1 0 ] ;
dx dy 1
1 0 0
0 1 0 即平移变换矩阵。
dx dy 1
2d旋转:
旋转相比平移稍稍复杂:
设某点与原点连线和X轴夹角为b度,以原点为圆心,逆时针转过a度 , 原点与该点连线长度为R, [x,y]为变换前坐标, [X,Y]为变换后坐标。
x = Rcos(b) ; y = Rsin(b);
X = Rcos(a+b) = Rcosacosb - Rsinasinb = xcosa - ysina; (合角公式)
Y = Rsin(a+b) = Rsinacosb + Rcosasinb = xsina + ycosa ;
用矩阵表示:
cosa sina 0
[X, Y, 1] = [x, y, 1][-sina cosa 0 ]
0 0 1
cosa sina 0
-sina cosa 0 为旋转变换矩阵。
0 0 1
2d缩放
设某点坐标,在x轴方向扩大 sx倍,y轴方向扩大 sy倍,[x,y]为变换前坐标, [X,Y]为变换后坐标。
X = sx*x; Y = sy*y;
则用矩阵表示:
sx 0 0
[X, Y, 1] = [x, y, 1][ 0 sy 0 ] ;
0 0 1
sx 0 0
0 sy 0 即为缩放矩阵。
0 0 1
3d平移:
假设M是原点为(0,0,0)的坐标系,N是原点为(2,2,2)的坐标系,点P(px,py,pz)是M中的一点,那么点P在N中的坐标P‘是多少呢?
p'x=px-2;p'y=py-2;p'z=pz-2;换成矩阵看看:
p'x=|px|+|-2|
p'y=|py|+|-2|
p'z=|pz|+|-2|
换成齐次坐标就为:
|p'x||100tx||px|
|p'y|=|010ty|*|py|
|p'z||001tz||pz|
|1||0001||1|
对上面来讲:
tx=-2,ty=-2;tz=-2;
3d旋转:
假设M是原点为(0,0,0)的坐标系,点p(px,py,pz)绕z轴逆时针旋转a度到点p',那么点p'是多少呢?
p'x=px*cosa-py*sina
p'y=px*sina+py*cosa
p'z=z
换成齐次坐标就为:
|x'||1000||x|
|y'|=|0cosa-sina0|*|y|
|z'||0sinacosa0||z|
|1||0001||1|
那么绕x轴呢?
p'y=py*cosa-pz*sina
p'z=py*sina+pz*cosa
p'x=x
换成齐次坐标就为:
|x'||1000||x|
|y'|=|0cosasina0|*|y|
|z'||0sinacosa0||z|
|1||0001||1|
那么绕y轴呢?
p'z=pz*cosa-px*sina
p'zx=pz*sina+px*cosa
p'y=y
换成齐次坐标就为:
|x'||cosa0sina0||x|
|y'|=|0100|*|y|
|z'||-sina0cosa0||z|
|1||0001||1|
3d缩放:
假设M是原点为(0,0,0)的坐标系,点P(px,py,pz)沿x轴缩放sx,沿y轴缩放sy,沿z轴缩放sz后的坐标p'是多少呢?
p'x=px*sx
p'y=py*sy
p'z=pz*sz
换成齐次坐标就为:
|x'||sx000||x|
|y'|=|0sy00|*|y|
|z'||00sz0||z|
|1||0001||1|
(3)3d错切变换
三维错切变换是指图形沿X、Y、Z三个方向的错切变换。
其变换矩阵为:
错切变换是画斜轴测图的基础,按方向不同,可分为六种基本变换。
(1)沿X轴含Y向错切,变换矩阵为:
错切变换为:
即x'=x+Dy,y'=y,z'=z,如图
(2)沿X轴含Z向错切,变换矩阵为:
(3)沿Y轴含X向错切,变换矩阵为:
(4)沿Y轴含Z向错切,变换矩阵为:
(5)沿Z轴含X向错切,变换矩阵为:
(6)沿Z含Y向错切,变换矩阵为:
6.第六章:
射影变换考的较少。
7.第七章:
bezier曲线、DeCasteljau算法,coons曲面,nurbs曲线和曲面概念
重点会考双三次曲线、曲面及其矩阵形式。
重点会考到B-样条曲面的方程和矩阵方程。
贝塞尔曲线是应用于二维图形应用程序的数学曲线。
它是依据四个位置任意的点坐标绘制出的一条光滑曲线。
DeCasteljau算法是计算伯恩斯坦形式的多项式或贝塞尔曲线的递归方法。
nurbs曲线是非均匀有理B样条曲线
8.第八章:
线框模型,实体几何表示(CDG),表面模型,分解表示以及八叉树(优缺点是重点)、层次或属性结构表示类似人体等活动的形体。
以及构造形体的正则集合运算概念(就是集合的并、交、差等运算的规范说法)。
线框模型是三维电子表示或者三维计算机图形中的物体的可视化表示方法。
通常说来,线框模型是利用对象形体的棱边和顶点来表示几何形状的一种模型,它只反映出二维实体的部分形状信息,难以得到物体的剖面图、消除隐藏线及画出两个面的交线或轮廓线等。
优点:
1.根据三维数据,可产生任意视图,为生成多视图的工程图提供方便;同时能生成任意视点的透视图或轴测图
2.构造模型时操作简单,在CPU时间及存储方面开销低构造模型时操作简单在时间及存储方面开销低
3.用户无需培训,使用该系统是人工绘图的自然延伸
缺点:
1.因为所有的棱线都得到显示,物体的真实形状需通过人脑的解释才能理解,极易产生二义性
2.缺少曲面轮廓线
3.由于在数据结构中缺少边与面、面与体之间的关系,即拓扑信息,因此不能构成实体,无法识别面与体,更谈不上区别体内和体外不能消除隐藏线不能任意剖切不能进行面的求交不能消除隐藏线,不能任意剖切,不能进行面的求交,无法生成数控加工刀具轨迹,不能自动划分有限元网格,不能检查物体间碰撞和干涉
构造实体几何(英文为Constructivesolidgeometry,缩写为CSG)是实体造型中应用的一项技术。
CSG是三维计算机图形学与CAD中经常使用的一个程序化建模技术。
在构造实体几何中,建模人员可以使用逻辑运算符将不同物体组合成复杂的曲面或者物体。
通常CSG都是表示看起来非常复杂的模型或者曲面,但是它们通常都是由非常简单的物体组合形成的。
在有些场合中,构造实体几何只在多边形网格上进行处理,因此可能并不是程序化的或者参数化的。
优点
1.表示简单、直观,无二义性
2.数据量比较小,内部数据的管理比较容易
3.形体形状容易被修改
4.可用作图形输入的一种手段
5.容易计算物体的整体性质
6.物体的有效性自动得到保证
缺点
1.表示物体的CSG树不唯一
2.受体素种类和对体素操作种类的限制,CSG方法表示形体的覆盖域有较大的局限性3.形体的边界几何元素(点、边、面)隐含地表示在CSG中,因此,显示与绘制CSG表示的形体需要较长的时间
4.对形体的局部操作比较麻烦
5.求交计算麻烦
表面模型
适用范围:
该模型适用于其表面不能用简单的数学模型进行描述的复™该模型适用于其表面不能用简单的数学模型进行描述的复杂物体型面,如汽车、船舶、水利机械和家用电器等产品外观设计以及地形、地貌、石油分布等资源描述中
优点:
能够实现消隐、着色、表面积计算、二个曲面的求交、数控刀具轨迹的生成、有限元网格划分等
擅长于构造复杂曲面物体,如模具、汽车、飞机等表面
缺点:
只能表示物体的表面及边界,不能实行剖切、物性计算、物体间的碰撞和干涉检查
分解表示
优点:
可以表示任何物体
容易实现物体间的集合运算
容易计算物体的整体性质,如体积等
缺点:
是物体的非精确表示
占用大量的存储空间,如1024*1024*1024=1Gbits没有边界信息,不适于图形显示
对物体进行几何变换困难,如非90度的旋转变换
八叉树表示法
优点
可以表示任何物体,数据结构简单
容易实现物体间的集合运算
容易计算物体的整体性质,如体积等
较空间位置枚举表示占用的存贮空间少
缺点
是物体的非精确表示
没有边界信息,不适于图形显示
对物体进行几何变换困难
9.第九章:
(1)几种光照模型,尤其是phong,gouraud模型的概念和异同比较。
重点会考到着色的双线性插值公式的数学公式.
phong模型是三维电脑图像的绘图技巧之一,结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值,以插值方式来估计其他位置像素的色值。
gouraud模型是先根据三角形三个顶点的法矢量,和任意的光线模型,得出这三点的光强。
然后,沿三角形的边和水平扫描线分别进行插值计算,得出这个三角形上的各点的光强。
异同比较:
Gouraud明暗处理模型是对顶点处的光亮度进行线形差值,而Phong模型是对顶点处的法向量进行线形差值,然后再把各采样点的法向量代入光亮度公式进行计算。
二者相比Phong明暗处理较好地模拟了表面的光滑性,尤其是对镜面高光现象模拟的更加真实并能大大减轻马赫带效应,因而可得到更好的曲面绘制效果。
试说明怎样用双线性插值来计算多边形内一点P的光亮度。
答:
如图所示:
一条扫描线与一多边形的边相交,交线的两个端