考试资料整理待修正.docx

上传人:b****6 文档编号:7418941 上传时间:2023-01-23 格式:DOCX 页数:19 大小:421.93KB
下载 相关 举报
考试资料整理待修正.docx_第1页
第1页 / 共19页
考试资料整理待修正.docx_第2页
第2页 / 共19页
考试资料整理待修正.docx_第3页
第3页 / 共19页
考试资料整理待修正.docx_第4页
第4页 / 共19页
考试资料整理待修正.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

考试资料整理待修正.docx

《考试资料整理待修正.docx》由会员分享,可在线阅读,更多相关《考试资料整理待修正.docx(19页珍藏版)》请在冰豆网上搜索。

考试资料整理待修正.docx

考试资料整理待修正

一、选择题

1.显存概念

1)帧缓存(俗称显存):

存储屏幕上像素的颜色值。

2)帧缓存中单元数目至少与显示器上像素的数目相同,单元与像素一一对应,各单元的数值决定了其对应像素的颜色。

3)显示颜色的种类与帧缓存中每个单元的位数有关。

4)帧缓存与分辨率的关系:

分辨率M*N、颜色个数K与显存大小V的关系

V>=MxNx「log2^K「(取上限)

若存储器位长固定,则屏幕分辩率与同时可用的颜色种数成反比关系

例:

颜色为真彩色、分辩率是1024×1024的显示器,需要

1024×1024×log2224/8=3兆字节

2.图形学应该考虑的问题

1)如何在计算机中构造一个客观世界:

几何建模(几何)

2)如何将计算机中的虚拟世界展现出来:

几何的视觉实现(绘制)

3.各种消隐算法的特点

1)图像空间消隐

●描述

for(图像中每一个像素){

确定由投影点与像素连线穿过的距离观察点最近的物体;

用适当的颜色绘制该像素;}

●特点:

在屏幕坐标系中进行的,生成的图像一般受限于显示器的分辨率

●算法复杂度为O(nN):

场景中每一个物体要和屏幕中每一个像素进行排序比较,n为物体个数,N为像素个数

●代表方法:

z缓冲器算法,扫描线算法等

1.Z-Buffer算法

z缓冲器:

存储的是对应像素的z值

假设在视点坐标系(oxyz)中,投影平面为z=0,视线方向沿(-z)轴方向,投影为平行投影

深度值就是物体沿着视线(-z)方向、与视点的距离

离视点近的物体遮挡离视点远的物体:

z值越大,离视点越近

算法思路:

(1)帧缓冲器中的颜色置为背景颜色

(2)z缓冲器中的z值置成最小值(离视点最远)

(3)以任意顺序扫描各多边形

a)对于多边形中的每一像素,计算其深度值z(x,y)

b)比较z(x,y)与z缓冲器中已有的值zbuffer(x,y)如果z(x,y)>zbuffer(x,y),那么计算该像素(x,y)的光亮值属性并写入帧缓冲器更新z缓冲器zbuffer(x,y)=z(x,y)

优点:

●算法复杂度(O(nN)):

对于给定的图像空间,N是固定的,所以算法复杂度只会随着场景的复杂度线性地增加

●无须排序:

场景中的物体是按任意顺序写入帧缓冲器和z缓冲器的,无须对物体进行排序,从而节省了排序的时间

●适合于并行实现(硬件加速)

不足:

●z缓冲器需要占用大量的存储单元:

一个大规模复杂场景中:

深度范围可能为106,一个像素需要24bit来存储其深度信息。

如果显示分辨率为1280×1024,那么深度缓冲器需要4MB存储空间

●深度的采样与量化带来走样现象

●难以处理透明物体

解决存储问题:

逐区域进行z缓冲器消隐

2)景物空间消隐

●描述

for(世界坐标系中的每一个物体){

确定未被遮挡的物体或者部分物体;

用恰当的颜色绘制出可见部分;}

●特点:

算法精度高,与显示器的分辨率无关,适于精密的CAD工程领域

●算法复杂度为O(n2):

场景中每一个物体都要和场景中其他的物体进行排序比较,n为物体个数

●代表方法:

背面剔除、表优先级算法等

●理论上:

如果n(物体数)

●实际应用中:

通常会考虑画面的连贯性,所以图像空间算法的效率有可能更高

1.

背面剔除算法:

利用视线方向V和物体表面法向N之间的关系

(1)NV<0:

不可见

(2)NV0:

可见

作为消隐算法,背面剔除适用于凸多面体,不适用于凹多面体或其它复杂物体

对于蓝色与绿色的面,简单的背面剔除不能实现完全消隐

适用于场景消隐的预处理:

消除一些显然不可见表面,从而提高其它消隐算法的效率

2.表面优先级算法(画家算法)

a)三维物体的深度排序算法

原理:

离视点近的物体可能遮挡离视点远的物体

在景物空间确定物体之间的可见性顺序(物体离视点远近),由远及近地绘制出正确的图像结果——油画家算法

●条件:

场景中物体在z方向上没有相互重叠

●二维半物体的深度排序算法只要简单地比较其z值即可

算法思路:

1.将场景中的多边形序列按其z坐标的最小值zmin(物体上离视点最远的点)进行排序

2.当物体间的z值范围不重叠时:

假设多边形P的zmin在上述排序中最小,如果多边形P的z值范围与Q的z值范围不重叠,即Pzmax

3.当物体间的z值范围重叠时:

判断多边形P是否遮挡场景中多边形Q,需作如下5个判别步骤

1.多边形P和Q的x坐标范围是否不重叠

2.多边形P和Q的y坐标范围是否不重叠

3.从视点看去,多边形P是否完全位于Q的背面

4.从视点看去,多边形Q是否完全位于P的同一侧

4.P和Q交换顺序后,仍不能判断其优先级顺序,可以按如下方法处理:

将其中一个多边形沿另一个物体剖分

特点:

●三维物体的深度排序算法适合于固定视点的消隐

●通过多边形的剖分,总是可以实现多边形物体在三维空间中的深度排序

●深度排序算法可以有效地实现透明效果

●在视点变化的场合中(如飞行模拟),深度排序算法难以满足实时性的要求

b)二叉空间剖分树算法(BSP)(见计算题)

4.OpenGL库函数的分类

1)OpenGL核心库(GL)

这部分函数用于常规的、核心的图形处理,是OpenGL的核心部分,包含300多个函数,函数名前缀一律是“gl”,核心库可以在所有的OpenGL平台上运行

2)OpenGL实用库(GLU)

这部分函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。

如:

坐标变换、纹理映射、绘制椭球、茶壶等简单多边形。

包含约50个函数,函数名前缀一律是“glu”,实用库可以在所有的OpenGL平台上运行

3)OpenGL辅助库(GLAUX)

这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。

包含约30个函数,函数名前缀一律是“aux”,OpenGL中的辅助库不能在所有的OpenGL平台上运行

4)OpenGL工具库(GLUT)

这部分函数主要提供基于窗口的工具,以及一些绘制较复杂物体的函数。

包含大约30多个函数,函数名前缀为“glut”,glut中的窗口管理函数不依赖于运行环境的,可以在所有的OpenGL平台上运行

5)OpenGL对窗口系统的扩展(例如对windows系统的扩展WGL,等等)

5.种子填充算法的原理

对区域重新着色的过程:

将指定的颜色从种子点开始扩展到整个区域

(填充算法要求区域是连通的)

连通性:

4连通区域:

区域中任意两点可通过上下左右四个方向互相到达

8连通区域:

区域中任意两点可通过上下左右和对角线八个方向互相到达

 

4连通与8连通区域的区别:

⏹连通性:

4连通可看作8连通区域,但对边界有要求不同

⏹依据区域内点能否访问到区域外的点,对边界的要求是

◆4连通区域,边界只要8连通即可

◆8连通区域,边界必须是4连通

 

 

●种子填充算法(泛滥填充:

flood-fill)

(1)内点表示的4连通区域:

种子P(x,y),原色oldColor,新颜色newColor

方法:

先判断P(x,y)的颜色,若其值不等于oldColor,说明该像素位于区域外,或已设置为newColor,算法结束;否则,置像素颜色为newColor,再对其相邻的上下左右四个像素分别作为种子作上述递归处理。

voidFloodFill4(intx,inty,intoldColor,

intnewColor)

{if(GetPixel(x,y)==oldColor)

{SetPixel(x,y,newColor);

FloodFill4(x,y+1,oldColor,newColor);

FloodFill4(x,y-1,oldColor,newColor);

FloodFill4(x-1,y,oldColor,newColor);

FloodFill4(x+1,y,oldColor,newColor);

}

}/*endofFloodFill4()*/

①FloodFill4(x,y+1,oldColor,newColor);

②FloodFill4(x,y-1,oldColor,newColor);

③FloodFill4(x-1,y,oldColor,newColor);

④FloodFill4(x+1,y,oldColor,newColor);

(2)边界表示的4连通区域

voidBoundaryFill4(intx,inty,intoldColor,intnewColor)

{//oldColor边界像素颜色

intcolor;

color=GetPixel(x,y);

if((color!

=oldColor)&&(color!

=newColor))

{

SetPixel(x,y,newColor);

BoundaryFill4(x,y+1,oldColor,newColor);

BoundaryFill4(x,y-1,oldColor,newColor);

BoundaryFill4(x-1,y,oldColor,newColor);

BoundaryFill4(x+1,y,oldColor,newColor);

}

}/*endofBoundaryFill4()*/

●缺点:

●有些像素需要重复判断,降低算法效率

●栈结构占空间

●递归执行,算法简单,但效率不高,区域内每一像素都引起一次递归,进/出栈,费时费内存

●改进:

●减少递归次数,提高效率

6.简单光照模型的反射公式

综合三种反射:

考虑光的衰减(光到物体表面)

考虑衰减的方程:

考虑到阴影的方程:

7.基于深度Buffer算法的特点(见上面消隐算法)

8.OpenGL着色模式函数的调用

voidglShadeModel(GLenummode);

设置着色模式。

参数mode可以是GL_SMOOTH(默认值)或GL_FLAT。

采用恒定着色时(即GL_FLAT),使用图元中某个顶点的颜色来渲染整个图元。

在使用光滑着色时(即GL_SMOOTH),独立的处理图元中各个顶点的颜色。

对于线段图元,线段上各点的颜色将根据两个顶点的颜色通过插值得到。

对于多边形图元,多边形内部区域的颜色将根据所有顶点的颜色插值得到。

9.窗口与视区的关系

窗口定义显示什么:

在世界坐标系中需进行观察和处理的一个坐标区域称为窗口

视区定义在何处显示:

窗口映射到显示器(设备)上的区域称为视区。

改变视区的位置,可在输出设备显示区的不同位置观察物体。

改变视区的尺寸,可改变显示对象的尺寸和位置:

–如果将不同尺寸的窗口连续映射到尺寸不变的视区中,可得到缩放的效果;

•当窗口越变越小时,可以放大场景中的某一部分,从而观察在较大的窗口时未显示出的细节;

•同样,通过从一个场景部分开始连续地放大的窗口,可以得到逐步放大的场景;

•将固定尺寸的窗口移过场景中不同对象,产生扫描的效果。

窗口内的点(xw,yw)映射到对应视区的点(xv,yv):

xv=xvmin+(xw-xwmin)sx

yv=yvmin+(yw-ywmin)sy

sx=(xvmax-xvmin)/(xwmax-xwmin)

sy=(yvmax-yvmin)/(ywmax-ywmin)

10.各种裁剪算法比较

1)直线段裁剪

1.直接求交算法:

a)待裁剪线段和窗口的关系:

线段完全可见:

端点位于窗口内

显然不可见:

端点位于边界同侧

线段至少有一端点在窗口之外,但非显然不可见

b)计算交点

特点:

⏹方法直接,易懂

⏹不能快速判断显然不可见的线段

2.Cohen-Sutherland算法(编码算法)

算法步骤(思想):

⏹第一步判别线段两端点是否都落在窗口内,如果是,则线段完全可见;否则进入第二步;

⏹第二步判别线段是否为显然不可见,如果是,则裁剪结束;否则进行第三步;

⏹第三步求线段与窗口边延长线的交点,这个交点将线段分为两段,其中一段显然不可见,丢弃。

⏹对余下的另一段重新进行第一步,第二步,第三步处理,直至结束

(裁剪过程是递归的)

区域编码:

⏹由窗口四条边所在直线把二维平面分成9个区域,每个区域赋予一个四位编码,CtCbCrCl,上下右左

端点编码:

定义为它所在区域的编码

根据顶点编码判断线段与多边形的关系:

⏹当两个端点的编码全为0时,线段完全可见

⏹当线段的两个端点的编码的逻辑“与”非零时,线段为显然不可见的

⏹对于那些非完全可见、又非显然不可见的线段,需要求交

⏹求交前先测试与窗口哪条边所在直线有交?

⏹规则:

判断端点编码中各位的值CtCbCrCl

⏹分别对应:

上、下、右和左边

⏹端点码值位值不同时,说明线段与对应窗口边相交

⏹次序:

上、下、右和左边

⏹以交点为界,丢弃外侧线段,以交点为新端点判断另一线段,重复上述过程

特点:

◆对完全可见和显然不可见线段的快速判别

◆适用二种场合

⏹大裁剪窗口

⏹裁剪窗口特别小

◆裁剪窗口的拓展性

⏹可以延伸为凸多边形,但随着边数的增加,编码变复杂

3.Liang-Barsky:

设要裁剪的线段是P0P1。

P0P1和窗口边界交于A,B,C,D四点,见图。

算法的基本思想是从A,B和P0三点中找出最靠近的P1点,图中要找的点是P0。

从C,D和P1中找出最靠近P0的点。

图中要找的点是C点。

那么P0C就是P0P1线段上的可见部分。

2)多边形裁剪

1.Sutherland-Hodgman算法(亦称逐边裁剪算法):

(重点)

●S-H算法基本思想:

将多边形关于矩形窗口的裁剪分解为多边形关于窗口四边所在直线的裁剪

●步骤:

⏹多边形由一系列顶点表示:

V1V2…Vn

⏹按一定(左上右下)的次序依次裁剪;与左边所在直线裁剪的结果是上边的输入,依次类推

⏹输出为顶点序列

●裁剪线裁剪

⏹多边形与窗口每条边的裁剪

◆裁剪线:

窗口边以及其延长线

◆内侧空间与外侧空间

●包含裁剪窗口的半空间为内侧空间,否则为外侧空间

⏹多边形与窗口裁剪线的裁剪

◆依据多边形的边SP与半空间的关系

●情况1:

同在内侧,裁剪后输出P

●情况2:

S在内侧,P在外侧,裁剪后输出交点i

●情况3:

同在外侧,裁剪后不输出

●情况4:

S在外侧,P在内侧,裁剪后输出交点i和P

●算法

⏹将顶点序列P1P2…Pn作为输入

⏹依次对窗口的每条裁剪线作下列处理

◆输入顶点序列

◆依次对顶点序列中相邻顶点构成的边PiPi+1进行裁剪处理

◆输出顶点序列(下条裁剪线的输入)

例子:

左:

输入P1P2P3P4P5P6P7P8

输出I1P2P3P4P5P6P7P8I2

上:

输入I1P2P3P4P5P6P7P8I2

输出P2I3I4P4P5P6P7P8I2I1

右:

输入P2I3I4P4P5P6P7P8I2I1

输出I3I4P4I5I6P6P7P8I2I1P2

下:

输入I3I4P4I5I6P6P7P8I2I1P2

输出I4P4I5I6I7I8P8I2I1P2I3

注意:

(1)交点是边与裁剪线的交点

(2)边的顶点是有序的

●特点:

●裁剪算法采用流水线方式,算法简单

●推广到任意凸多边形裁剪窗口

原因是:

凸多边形的边能将平面空间分成2部分,其中一部分含裁剪窗口

2.Weiler-Athenton算法:

(详细介绍见CG07--二维裁剪)

(Sutherland-Hodgeman算法解决了裁剪窗口为凸多边形窗口的问题,但一些应用需要涉及任意多边形窗口(含凹多边形窗口)的裁剪。

Weiler-Atherton多边形裁剪算法正是满足这种要求的算法。

二、简答题

1.颜色插值(Gourand着色方法)

步骤:

1、计算多边形的单位法矢量

2、计算多边形顶点的单位法矢量(共享顶点的多边形法矢量

的平均值)

3、利用光照明方程计算顶点颜色

4、对多边形顶点颜色进行双线性插值,获得多边形内部各点

的颜色

双线性插值:

⏹已知P1(x1,y1)、P2(x2,y2)、P3(x3,y3),颜色分别为I1、I2和I3。

A(xA,yA)和B(xB,yB)为交点,P(x,y)为AB上一点,计算P点的颜色

2.齐次坐标的作用。

所谓齐次坐标表示就是用

维向量表示

维向量。

齐次坐标表示法一方面可以表示无穷远点,另一方面用齐次坐标表示,使得所有几何变换都可以用矩阵相乘来表示,获得了平移、旋转和缩放变换的一致性表示,无论哪种变换形式,变换矩阵均可以用一个统一矩阵来表示。

由于引入了齐次坐标,基本几何变换均可以表示成

的形式,因此组合变换的结果是每次的变换矩阵相乘,组合变换同样具有

的形式。

由于矩阵的乘法满足结合律,因此,通常在计算时先求出T,再与P相乘。

3.Phong反射模型(n值大小的判断)

Phong模型(非理想反射面)

计算公式:

Ks是物体表面镜面反射系数,它与入射角和波长有关;

α是视线与反射方向的夹角;

n为镜面高光系数,用来模拟镜面反射光在空间中的汇聚程度,它是一个反映物体表面光泽度的常数;近似地描述了镜面反射光的空间分布

镜面参数n的影响效果

 

n=15n=5n=1

4.二维观察流程图(自行车示例)

二维观察流程示意图:

局部坐标系——世界坐标系——观察坐标系——设备坐标系——窗口坐标系

三、计算题

1.中点画线算法

隐式方程:

F(x,y)=ax+by+c=0

式中a=y0-y1=-y,b=x1-x0=x,c=x0*y1-x1*y0

递推公式:

(前提条件:

斜率

其它几种情况:

di<0时,y增1

di>0时,x增1

di>0时,y减1

di<0时,x增1

例3-1:

直线段端点坐标

p0(20,10)和p1(30,18)

△x=30-20=10;△y=18-10=8

斜率m=0.8;

a=y0-y1=-y=-8;

b=x1-x0=x=10;

d0=2a+b=-6;

2(a+b)=4

2.二叉空间剖分树(BSP树-BinarySpacePartitioning)构建

基本原理:

●如果场景中的多边形可以被一个平面分割成两部分(如果有多边形跨越分割平面,则剖分该多边形),那么当视点位于分割平面的正侧时,位于分割平面正侧的多边形会遮挡位于分割平面另一侧的多边形

●对位于分割平面两侧的多边形继续进行递归分割,直至每一个分割平面两侧或一侧只有一个多边形

●分割过程可以用一个二叉树的数据结构来表示

●在BSP树算法中,分割平面取作场景中的多边形

给定场景的BSP树不是唯一的

“最佳”的BSP树的两个标准:

●使BSP树尽可能平衡

●尽可能减少多边形的剖分

BSP树的遍历过程就是建立多边形的优先级的过程,这是一个递归过程

●如果视点位于分割平面的正侧,那么该BSP树的遍历过程应当是:

负侧分支→根结点多边形→正侧分支

●如果视点位于分割平面的负侧,那么该BSP树的遍历过程应当是:

正侧分支→根结点多边形→负侧分支

●这个判定标准递归地应用于每个子分支

3.种子填充(见选择题)

4.逐边裁剪算法(见选择题)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1