资源描述
课程名称
3D游戏软件设计
教
材
信
息
名称
《OpenGL编程指南》
出版社
机械工业出版社
作者
(美)Dave Shreiner著;李军 徐波等译
版次
2011年3月第1版
一、 客观部分:(单项选择、多项选择、不定项选择、判断)
(一)、选择部分
(1)OPenGL常用的库里面,属于核心库的是(A)
A GL B GLU C GLAUX D GLUT
★考核知识点: OpenGL概述
(2)OPenGL渲染流水中,对光栅化描述正确的是(B)
A 把顶点变换成图元
B 把几何数据和像素数据转换为片断的过程。它将几何数据转换成片元,片元和要显示的像素一一对应
C OpenGL应用程序可以在几何物体上应用纹理图像,使它们看上去更为逼真D主要的内容就是裁剪,它的任务是消除位于半空间之外的那部分几何图元。在某些情况下,还要进行透视除法,用以得到归一化的设备坐标
★考核知识点: OpenGL概述
(3)下面对于OpenGL特点描述正确的有(ABCD)
A标准支持灵活,可以用软件例程实现也可以使用软硬件组合使用
B具有灵活的伸缩性
C提供了一套良好的功能扩充机制,并且各个版本向后兼容
D跨平台,在科研和教学上是主流
★考核知识点: OpenGL概述
(4)1992年7月,SGI公司发布了OpenGL的1.0版本,随后又与微软公司共同开发了NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用(对)
★考核知识点: OpenGL概述
(5)OpenGL(开放性图形库Open Graphics Library):是图形硬件的一种软件接口(对)
★考核知识点: OpenGL概述
(6)(C)是用于定义构成物体的三角形单元列表的坐标系。
A 观察坐标系B世界坐标系C本地坐标系D转换坐标系
★考核知识点: 状态管理和绘制几何物体
(7)glBegin()函数的意义是(B)
A标志着程序的执行的开始
B标志着一个顶点数据列表的开始
C标志着OpenGL的绘制操作的开始
D标志着当前函数的开始
★考核知识点: 状态管理和绘制几何物体
(8)在win32程序中,主函数是从哪里进入执行的(B)
A GLMain B WinMain C Begin D main
★考核知识点: 状态管理和绘制几何物体
(9)OpenGL中在颜色索引模式下使用的用于选择单值索引的函数是(A)。
A glIndex B glClampColor C glClear D glColor3f
★考核知识点: 颜色渲染和纹理贴图
(10)下列哪个颜色不属于三原色(D)
A红 B蓝 C绿 D白
★考核知识点: 颜色渲染和纹理贴图
(11)OpenGL的光照模型根据材料反射的红、绿和蓝光的比例来模拟它的颜色。当一个纯红的球体,如果给球体仅仅投上绿色的光线,那么看起来球的颜色会是黑色(对)
★考核知识点: 颜色渲染和纹理贴图
(12)用函数glColor3i()函数设置的黑色的颜色值为(A)
A (0,0,0) B(255,0,255) C(255,255,255) D(1,1,1)
★考核知识点: 颜色渲染和纹理贴图
(13)OpenGL中光照模型,被物体表面均匀的反射。即使光是被均匀的反射回去的,它直射的物体表面比从某个角度照射过来时要亮(B)
A环境光B散射光C镜面光D发射光
★考核知识点: 环境光、散射光、镜面光、发射光
(14)OpenGL中如何判断一个点接收了光源的多少光线(B)
A通过距离光源的距离进行计算
B通过法线相对光源的方向进行计算
C通过物体的颜色值进行计算
D通过物体和光源的颜色值的综合考虑进行计算
★考核知识点: 光照
(15) OpenGL提供了最大数目为N的单场景内光照光源模型,N为(B)
A 1 B 8 C 16 D不限制,只要为2的幂就可以了
★考核知识点: 光照
(16) OpenGL光照模型中,有一种会将光源强烈的反射到了另外一个特定的方向。高亮度的光柱往往能在被照射的物体上产生称之为亮斑的亮点(A)
A镜面光B聚光灯光C环境光D发射光
★考核知识点: 光照
(17) OpenGL光照模型中,表面的发射颜色可以增加物体的强度,但是他们不受任何光源的影响,在整个场景中,并没有作为一种额外的光照(对)
★考核知识点: 光照
(18)设置光源位置时,当我们的光源坐标位置(x,y,z,w)中的w为0时代表我们的光为平行光源(对)
★考核知识点: 光照
(19) OpenGL一个场景中至多可以在包含16个光源(对)
★考核知识点: 光照
(20) 用函数glColor3i()函数设置的黑色的颜色值为(A)
★考核知识点: 绘制像素、位图字体和图像
(21)像素数据从可以开始从缓冲区读取到内存然后把像素数据从内存写入到帧缓冲最后在帧缓冲内部复制像素数据(对)
★考核知识点: 绘制像素、位图字体和图像
(22)以下哪个函数可以设置当前的光栅位置()
A glTranslatef() B glRasterPos() C glRotatef() D glDrawPos()
★考核知识点: 绘制像素、位图字体和图像
(23) 在绘制几何图形之时,我们可以使用glColor*()函数去设置当前颜色或者当前颜色索引(是)
★考核知识点: 绘制像素、位图字体和图像
(24)在设置了光栅位置之后,我们可以使用glBitmap函数来绘制数据(对)
★考核知识点: 绘制像素、位图字体和图像
(25)void glRasterPos2*(type x,type y);用于设置位图的绘制位置。(对)
★考核知识点: 绘制像素、位图字体和图像
(26)glCopyPixels的像素路径包括(ABCD)
A像素传输操作B基于片断的操作C在帧缓冲区暂存D光栅化操作
★考核知识点: 绘制像素、位图字体和图像
(27) 当我们的源和目标的alpha值都为0.35时,当使用函数glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)进行像素混合,得出的结果描述正确的是? (C)
A源和目标混合效果相同
B混合色更接近源
C混合色更接近目标
D无法判断
★考核知识点: 混合抗锯齿雾多边形偏移
(28) 启动混合后,如果绿色物体和一个红色物体用glBlendFunc(GL_ONE,GL_ONE)方式混合后,结果的混合部分的颜色为(D)
A红色B绿色C白色D黄色
★考核知识点: 混合抗锯齿雾多边形偏移
(29) 图形学中称由于采样频率不足而造成的失真为走样,反走样通过多重采样改善图形锯齿效果(对)
★考核知识点: 混合抗锯齿雾多边形偏移
(30)如果不进行混和操作,每个新的片元都被OpenGL当成是不透明的,覆盖掉帧缓存已存在的颜色值。(对)
★考核知识点: 混合抗锯齿雾多边形偏移
(31)颜色定义中RGBA的A是alpha值,alpha值的作用是将已处理过的片元颜色值与存储在帧缓存中的像素颜色结合起来(对)
★考核知识点: 混合抗锯齿雾多边形偏移
(32)当前属于颜色索引模式时,我们可以进行的操作有(D)。
A实现颜色混和操作B实现透明效果C实现颜色叠加D实现颜色渐变效果
★考核知识点: 混合抗锯齿雾多边形偏移
(33) void glBlendFunc(Glenum afactor,Glenum bfactor)
其中参数afactor和参数bfactor分别用于指定源和目标的混合因子(对)
★考核知识点: 混合抗锯齿雾多边形偏移
(34)颜色混合方程中,GL_FUNC_ADD实现的功能是()
A CsS+CdD B CsS-CcD C min(CsS,CdD) D max(CsS,CdD)
★考核知识点: 混合抗锯齿雾多边形偏移
(35) 开启颜色混合的函数方式为(A)
A GL_BLEND B GL_BLENDING C GL_RENDER D GL_ENABLEBLEND
★考核知识点: 混合抗锯齿雾多边形偏移
(36) 一个矢量加上一个矢量结果为(A)
A一个矢量
B一个标量
C如果为零则不是矢量,其它情况下皆为矢量
D以上说法都不对
★考核知识点:图形变换的数学基础
(37) 两个矢量之间的点乘结果为(B)
A一个矢量
B一个标量
C如果为零则不是矢量,其它情况下皆为矢量
D以上说法都不对
★考核知识点:图形变换的数学基础
(38) glLoadIdentity()函数对于4×4矩阵操作结果为(D)
A [0,0,0,0;0,0,0,0;0,0,0,0;0,0,0,0]
B1,1,1,1;1,1,1,1;1,1,1,1;1,1,1,1]
C[1,0,0,1;0,1,0,1;0,0,1,1;0,0,0,1]
D[1,0,0,0;0,1,0,0;0,0,1,0;0,0,0,1]
★考核知识点:图形变换的数学基础
(39) 我们在使用定义视口函数 glViewport 中,第三个参数有什么作用(D)
A描述视口的距离屏幕最左位置
B描述视口的距离屏幕最上位置
C描述视口的高度
D描述视口的宽度
★考核知识点:图形变换的数学基础
(40) 通过矩阵[sx,0;0,sy]对二维的不经过原点的图元进行缩放变换,有可能得到的结果为(ABC)
A图元相对原点的位置变化了
B图元自身尺寸变化了
C图元可以只发生旋转,相对原点位置没有移动
D图元自身发生了旋转
★考核知识点:图形变换的数学基础
(41) 从物体坐标到屏幕坐标的显示流程中我们必须要经过的经典的变换流水包(ABC)
A世界坐标系内地变换
B对窗口的裁剪操作
C窗口到视口的变换
D对模型进行坐标进行变换
★考核知识点: OpenGL的视图变换
(42) 函数void gluPerspective ( Param1,Param2,Param3,Param4 )中,标示近裁剪面的是哪个参数(C)
A Param1 B Param2 C Param3 D Param4
★考核知识点: OpenGL的视图变换
(43) 哪些变换分别用于设定物体在世界坐标系中的位置、方向以及模型大小。(ABC)
A平移变换B旋转变换C缩放变换D投影变换
★考核知识点: OpenGL的视图变换
(44) (B)变换后的的几何体位于观察坐标系中。
A局部变换B取景变换C世界变换D空间变换
★考核知识点: OpenGL的视图变换
(45) 投影变换包括哪几种投影方式。(BC)
A平面投影B透视投影C正射投影D缩放投影
★考核知识点: OpenGL的视图变换
(46) 下对函数gluLookAt(0,0,0, 0,0,-3,1,0,0)描述正确的是
A观察点在原点(AD)
B正方向为z轴负方向
C观察方向指向z轴正方向
D正方向为x轴正方向
★考核知识点: OpenGL的视图变换
(47) glRotatef(fRot,1,1,0)描述先按照X轴旋转fRot,接着绕Y轴旋转fRot(错)
★考核知识点: OpenGL的视图变换
(48)在OpenGL中如果要实现运动模糊效果,需要借助以下哪个缓冲区(D)
A深度缓冲区B帧缓冲区C模版缓冲区D积累缓冲区
★考核知识点:帧缓冲区
(49) 当前程序的状态处于常规的绘图模式,那么接下来使用下列哪些函数可以退出当前绘图模式(AB)
A glRender(GL_FEEDBACK);
B glRender(GL_SELECT);
C glEnd();
D glBegin(GL_TRIANGLES)
★考核知识点:帧缓冲区
(50) 雾化效果在颜色索引模式下是不可用的(否)
★考核知识点:帧缓冲区
(51)如果我们需要使用OpenGL进行3维点选操作,那么可以通过函数glRenderMode()指定(B)进入选择模式
A GL_FEEDBACK B GL_SELECT C GL_PEEK D GL_MODEVIEW
★考核知识点:帧缓冲区
(52) OpenGL中如果锁住了深度缓冲区,那么所有的物体的深度就无法测试了,物体只是根据绘制的先后相互覆盖了(错)
★考核知识点:帧缓冲区
(53)绘制球体,我们使用函数:
void gluSphere( GLUquadricObj *obj,Gldouble radius,Glint slices,Glint stacks );(AB)
下面,我们对参数描述正确的选项有()
A slice代表的就是经线的数目
B stacks参数代表的就是纬线的数目
C slice参数代表的就是纬线的数目
D stacks代表的就是经线的数目
★考核知识点: 分割化和二次方程表面
(54) OpenGL中我们需要完成对NURBS对象的销毁,调用的函数是gluDeleteNurbsRenderer(对)
★考核知识点: 分割化和二次方程表面
(55)常见的纹理寻址模式有(ABCD)
A重叠纹理寻址模式B镜像纹理寻址模式
C钳位纹理寻址模式D边界颜色纹理寻址模式
★考核知识点: 分割化和二次方程表面
(56) gluQuadricDrawStyle 函数选择用于绘制几何形状的图元类型。系统默认的类型是使用三角条状图元来填充所要绘制的几何形状,填充模式默认为
A GLU_LINE B GL_FILL C GLU_SILHOUETTE D GLU_POINT
★考核知识点: 分割化和二次方程表面
(57) 绘制球体,我们使用函数:
void gluSphere( GLUquadricObj *obj,Gldouble radius,Glint slices,Glint stacks );
下面,我们对参数描述正确的选项有(AB)
A slice代表的就是经线的数目 B stacks参数代表的就是纬线的数目
C slice参数代表的就是纬线的数目 D stacks代表的就是经线的数目
★考核知识点: 求值器和NURBS
(58) 我们的B样条曲线(三次)和与贝塞尔曲线很相似,不同之处是此曲线会分解成很多的小段。每个给定段的形状都仅受到最近4个控制点的影响(是)
★考核知识点: 求值器和NURBS
(59) 我们的B样条曲线(三次)和与贝塞尔曲线很相似,不同之处是此曲线会分解成很多的小段。每个给定段的形状都仅受到最近4个控制点的影响(是)
★考核知识点: 求值器和NURBS
(60)(B)是Direct3D用来存储绘制到屏幕上的每个像素点深度信息的一块内存缓冲区
A 广度缓存 B 深度缓存 C 深度测试 D 广度测试
★考核知识点: 求值器和NURBS
(61) OpenGL中我们需要完成对NURBS对象的销毁,调用的函数是gluDeleteNurbsRenderer(对)
★考核知识点: 求值器和NURBS
(62)纹理阶段混合状态用于指定当前纹理颜色值和Alpha值的混合方法(对)
★考核知识点: 求值器和NURBS
(63)通常情况下,深度缓存用于判断三维空间中物体的遮挡情况(对)
★考核知识点: 求值器和NURBS
(64)设置深度缓存是指设置深度测试成功时对深度缓存如何操作(错)
★考核知识点: 求值器和NURBS
(65)图形学中称由于采样频率不足而造成的失真为走样,反走样通过多重采样改善图形锯齿效果(对)
★考核知识点: 求值器和NURBS
(66)渲染后物体模型通常是由三角形图元组成的,我们称它为一个Mesh结构(对)
★考核知识点: 求值器和NURBS
(67)若要从缓存中只读不写数据,就不需要锁定缓存,用完后解锁(错)
(68)如果我们需要使用OpenGL进行3维点选操作,那么可以通过函数glRenderMode()指定GL_SELECT,进入选择模式(对)
(69)在执行用于操纵名字堆栈的函数或调用glRenderMode()函数之后,如果出现了一次点击,OpenGL就会在选择数组中写入一个点击记录,所以,如果共享相同的名称对象,不会产生多条点击记录。(对)
(70)在点击发生时,名字堆栈的内容从(C)的元素开始。
A最顶部B上一个操作的位置C最底部D任意
(71) 如果我们需要使用OpenGL进行3维点选操作,那么可以通过函数glRenderMode()指定GL_SELECT,进入选择模式(对)
(72)进行点选操作后,假设当前的选择缓冲区为pSelectBuff,那么其中的pSelectBuff[0]的值得含义是(D)
A自上一个点击记录之后,与视景体相交的图元的所有顶点的最小窗口坐标的z值
B自上一个点击记录之后,与视景体相交的图元的所有顶点的最大窗口坐标的z值
C点击发生时名字堆栈的内容
D名字堆栈中压入的名字数
(73) OpenGL中如果锁住了深度缓冲区,那么所有的物体的深度就无法测试了,物体只是根据绘制的先后相互覆盖了(对)
★考核知识点: 选择和反馈
(74)名字堆栈形成了返回选择信息的基础,如果此时我们需要使用某个名称来替换名字堆栈顶部的元素,可以使用函数为(D)
A void glInitNames( void );B void glPushName( GLuint name );
C void glPopName( void );D void glLoadName( Gluint name );
★考核知识点: 选择和反馈
(75) 选择返回功能函数:
void glSelectBuffer( Glsizei size,Gluint *buffer )对函数描述正确的是(AD)
A buffer参数指向的数组用于存放选择数据
B buffer参数指向的数组仅仅用于存放选择的物体ID
C size表示这个数组可以存储单个数据的大小
D size表示这个数组可以存储的最大值
★考核知识点: 选择和反馈
(76) 用glSelectBuffer()函数指定用于返回点击记录的数组(对)
★考核知识点: 选择和反馈
(77)使用函数void gluPickMatrix( Gldouble x,Gldouble y,Gldouble width,Gldouble height,Glint viewport[4] );选择的挑选区域的中心是(B)
A 世界坐标B窗口坐标C物体坐标D可以任意指定
★考核知识点: 选择和反馈
(78) 由于粒子之间的碰撞计算量很大并且对于大多数模拟来说没有必要,所以我们很少使用粒子之间的碰撞。(对)
★考核知识点: 粒子系统
(79)粒子(Particle)是一种微小的物体,在数学上通常用点来表示其模型,所以显示和表示粒子时,我们通常使用点结构来描述。(对)
★考核知识点: 粒子系统
(80)以下可以通过常见的粒子系统实现的是(ABC)
A雪花B下雨C喷泉喷水D金属车漆效果
★考核知识点: 粒子系统
(81) 如果有两束光进入人眼,他们的成分为(R1,G1,B1)和(R2,G2,B2)那么叠加在一起的时候,如果蓝色分量超出1了,那么最后的叠加结果为(C)
A(R1, R2,1)B(R1+R2, R1+R2,1-R1-R2)C(R1+R2, R1+R2,1) D(R1, R2, 1- R1-R2)
★考核知识点: 混合效果
(82) Alpha分量主要是用来指定像素的混合计算比例的(对)
★考核知识点: 混合效果
(83)D3DCOLORVALUE结构体中包含r、g、b和a4个分量,表示物体表面对各种反射光的各种成分的反射比率。r=0.0 g=b=a=1.0;r=g=0.0 。此时红光和蓝光照射过来,只有蓝光被反射,即材质看上去为蓝色(对)
★考核知识点: 混合效果
(84)OpenGL的光照模型根据材料反射的红、绿和蓝光的比例来模拟它的颜色。当一个纯红的球体,如果给球体仅仅投上绿色的光线,那么看起来球的颜色会是(D)
A红色B绿色C白色D黑色
★考核知识点: 混合效果
(85) 平面着色模式,所有像素的Alpha值都大于等于该多边形的第一个顶点的Alpha值(错)
★考核知识点: 混合效果
(86)像素的Alpha值就是用来做纹理Alpha混合时进行加权计算的的权值(对)
★考核知识点: 混合效果
(87)Alpha测试并不把当前像素的颜色与颜色缓冲中像素的颜色混合,像素要么完全不透明,要么完全透明(对)
★考核知识点: 混合效果
(88)OpenGL中指定源混和因子和目标混和因子的函数:
void glBlendFunc(Glenum afactor,Glenum bfactor)描述正确的是(AB)
A其中参数afactor和参数用于指定源混合因子
B其中参数bfactor用于指定目标的混合因子
C其中参数afactor用于指定目标的混合因子
D其中参数bfactorb用于指定源的混合因子
★考核知识点: 混合效果
(89) 常见的纹理寻址模式有(ABCD)
A重叠纹理寻址模式B镜像纹理寻址模式C钳位纹理寻址模式D边界颜色纹理寻址模式
★考核知识点:纹理的高级技巧
(90) 通过矩阵[sx,0;0,sy]对二维的不经过原点的图元进行缩放变换,有可能得到的结果为
A图元相对原点的位置变化了(ABC)
B图元自身尺寸变化了
C图元可以只发生旋转,相对原点位置没有移动
D图元自身发生了旋转
★考核知识点:纹理的高级技巧
(91) 创建一个矩形图元255*255,它的大小恰好与纹理图中纹理的大小一样,要映射整个图元面积,分配给图元纹理坐标为(A).
A(0.0,0.0)(1.0,0.0)(1.0,1.0)(0.0,1.0)
B(0.0,0.0)(255.0,0.0)(255.0,255.0)(0.0,255.0)C
(0.0,0.0) (0.0,1.0) (1.0,0.0)(1.0,1.0)
D(0.0,0.0) (0.0,255.0) (255.0,0.0)(255.0,255.0)
★考核知识点:纹理的高级技巧
(92) 三维纹理图像可以看成是由一层一层的二维子图像矩阵构成的,在内存中,这些矩形按顺序排列在一起。(是)
★考核知识点:纹理的高级技巧
(93)对函数void glTexImage3D( Glenum target, Glint level,Glint internalFormat ,Glsizei width,Glsizei height,Glsizei depth,Glint border,Glenum format,Glenum type, const Glvoid * texels );参数描述正确的是(B)
A level是纹理目标在内存中的优先级
Blevel是mipmap细节层的序号
C level描述了纹理的强度程度
D描述了纹理的有效值取值范围
★考核知识点:纹理的高级技巧
(94) glCopyPixels()函数,但是并不把像素读到缓冲区,而是放在纹理内存中(对)
★考核知识点:纹理的高级技巧
(95)对OpenGL实现的Mipmap描述正确的是(B)
A它必须根据被贴图的物体的大小手动的确定应该使用哪个纹理
B它会根据被贴图的物体的大小自动确定应该使用哪个纹理
C Mipmap不需要一些额外的计算
D Mipmap并不需要额外的一些纹理存储区域
★考核知识点:纹理的高级技巧
(96) glPixelStore*()函数可以用于设置像素存储模式,使用诸如*ROW_LENGTH、*ALIGNMENT、*SKIP_PIXELS和*SKIP_ROWS这样的参数。这个函数用于控制对一个完整的像素或纹理单元矩形的一个子矩形的引用(对)
★考核知识点:纹理的高级技巧
(97)一个带有纹理图像的物体迅速的远离观察点而去时,纹理图像必须随必须被投影的图像一起缩小。为了避免闪烁抖动等人工痕迹,可以指定一系列预先过滤的分辨率递减的纹理图像称为(B)
A Vertex Shader B mipmap C HLSL D Cg
★考核知识点:纹理的高级技巧
(98) void glTexParameteri 第三个参数类型为GL_CLAMP描述正确的是ABC
A将大于1.0的数值设置为1.0,将超出[0.0,1.0]范围的数值截取到[0.0,1.0]范围内
B这样会导致纹理边缘的重复
C将小于0.0的数值设置为0.0
D图象在物体表面上不断重复,但是每次重复的时候对图象进行镜像或者反转
(99) 纹理坐标比一定非要在RGBA模式下才可以能使用(错)
★考核知识点:纹理的高级技巧
(100)void glTexParameteri 第三个参数类型为GL_REPEAT描述正确的是A
A图象在表面上重复出现
B自动将超出[0.0,1.0]范围的数值截取到[0.0,1.0]范围内
C图象在物体表面上不断重复,但是每次重复的时候对图象进行镜像或者反转
D这样的模式在纹理边缘处比较连贯
★考核知识点:纹理的高级技巧
(101) 对函数glTexParameteri边界截取类型描述正确的是(B)
A GL_CLAMP_TO_EDGE B CLAMP_TO_BORDER_ARB C GL_REPEAT D GL_CLAMP
★考核知识点:纹理的高级技巧
二、 主观部分:(程序设计,简答题)
1关于现实字体的一段程序如下,运行截图如下,现有若干空缺,请完成填空。
我们完成创建字体的功能函数CreateFont() 如下:
HFONT hFont;
HFONT hOldFont;
iBase=glGenLists(256);
hFont=CreateFont(
-24, //高度
0, //宽度
0, //旋转角度
0, //定位角
FW_BOLD, //字宽设置
FALSE,
FALSE,
FALSE,
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE|DEFAULT_PITCH,
"Courier New" //使用字体名称为Courier New
);
//保存之前的字体
hOldFont=(HFONT)SelectObject(hdc,hFont);
//从系统下载的字体文件中生成这些位图
wglUseFontOutlines(hdc,32,96,iBase,0.0,0.2f,WGL_FONT_POLYGONS,gmf);
//还原设备句柄为hdc,还原原来的字体类型
SelectObject(hdc,hOldFont);
//释放资源
DeleteObject(hFont);
4.2如下一段程序,运行完成基本形状的拼接功能,现在有若干空缺,请根据上下文完成填写。
程序截图1
在绘制正六变形和若干个平面组成的螺丝钉螺帽RenderHead()时候,我们需要进行如下操作:
float x,y,angle;
float height=25.0f; //螺帽厚度
float diameter=30.0f;
float normal[3],corners[4][3]; //存储点和法线
float step=(3.1415f/3.0f); //角度的六分之一,hexagon
//设置螺帽颜色
glColor3f(0.1f,0.1f,0.7f);
//顶点的三角形面逆时针方向
glFrontFace( GL_CCW );
//三角扇方式绘制
glBegin(GL_TRIANGLE_FAN);
glNormal3f(0.0,0.0,1.0f); //发现向上
glVertex3f(0.0f,0.0f,height/2.0f); //三角扇形的中间点
glVertex3f(0.0f, diameter, height/2.0f); //起点
for(angle = (2.0f*3.1415f)-step; angle >= 0; angle -= step)
{
x = diameter*(float)sin(angle);
y = diameter*(float)cos(angle);
//点
glVertex3f(x, y, height/2.0f);
}//for
//最后一个点的坐标指定
glVertex3f(0.0f,diameter,height/2.0f);
glEnd();
//构建螺帽的下平面,设置下平面法线
glNormal3f(0.0f, 0.0f, -1.0f);
glVertex3f(0.0f, 0.0f, -height/2.0f); //下中间点
for(angle = 0.0f; angle < (2.0f*3.1415f); angle += step)
{
x = diameter*(float)sin(angle);
y = diameter*(float)cos(angle);
glVertex3f(x, y, -height/2.0f);
}//for
//最后一个点的坐标指定
glVertex3f(0.0f, diameter, -height/2.0f);
glEnd();
4.3 关于纹理贴图的一段程序如下,运行截图如下,现有若干空缺,请完成填空。
我们完成加载纹理的功能函数LoadTexture () 如下:
bool LoadTexture()
{
bool Status=false;
AUX_RGBImageRec *TextureImage[1];
memset(TextureImage,0,sizeof(void*)*1); //只有唯一的一个纹理
TextureImage[0]=auxDIBImageLoad("PIC/Tex.bmp");
if ( TextureImage[0] )
{
Status=false;
//创建纹理标识
glGenTextures(1,&texture);
//创建具体的纹理内存等
glBindTexture(GL_TEXTURE_2D,texture);
//设置纹理映射模式
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
//具体指定数据
glTexImage2D(GL_TEXTURE_2D,0,3,TextureImage[0]->sizeX,TextureImage[0]->sizeY,0,GL_RGB,GL_UNSIGNED_BYTE,TextureImage[0]->data);
}//if
//释放内存中的资源
if ( TextureImage )
{
if (TextureImage[0]->data)
{
free(TextureImage[0]->data);
}
free(TextureImage[0]);
}//if
return true;
}//end
4.4 如下一段程序,运行完成物体颜色和材质属性相关功能,现在有若干空缺,请根据上下文完成填写。
程序截图1
在进行光照和材质相关的计算时,需要先进行必要设置操作,我们需要进行如下操作:
void InitScene( )
{
glClearColor(1.0,1.0,1.0,1.0);
//设置明暗处理模型
glShadeModel(GL_SMOOTH); //GL_FLAT
//glShadeModel(GL_FLAT);
//开启深度测试
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glClearColor(0.0f,0.0f,0.0f,0.0f);
glClearDepth(1.0f);
//使光源生效
glEnable(GL_LIGHTING);
//设置环境光
GLfloat ambientLignt[]={0.8,0.7,0.9,1.0};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT,ambientLignt);
//设置材料属性,自身的反光属性
GLfloat Shininess[]={80.0};
//镜面强度,白色
GLfloat Specular[]={1.0,1.0,1.0,1.0};
//设置材质颜色属性
GLfloat MatColor[]={0.9,0.9,0.9,1.0};
//光源位置
GLfloat Postion[]={1.0,1.0,1.0,0};
//具体设置GL_FRONT_AND_BACK
glMaterialfv(GL_FRONT,GL_SPECULAR,Specular);
glMaterialfv(GL_FRONT,GL_SHININESS,Shininess);
//设置光照模型
glLightfv(GL_LIGHT0,GL_POSITION,Postion); //给光源设置位置*/
glLightfv(GL_LIGHT0,GL_SPECULAR,MatColor); //给镜面光设置颜色
glLightfv(GL_LIGHT0,GL_DIFFUSE,MatColor); //设置漫反射颜色
//开启光照特征
glEnable(GL_LIGHT0);
}//endfnc
五、简答题(共15 分)
关于现实平面深度剪裁的一段程序如下,运行截图如下,通过移动深度剪裁面的远近,实现对现有立方体的剪裁。左图为原图,右边为裁剪结果图。部分功能空缺,请完成
GLfloat CuttingPlane=-15; //初始化设置深度剪裁面的深度值
在DrawScene函数中,我们实现:
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
//设置不写入颜色缓冲区
glDrawBuffer(GL_NONE);
glColor3i(0, 255, 0);
//设置一个遮挡平面,从 -
展开阅读全文