1、OpenGL试题库OpenGL试题库一、 选择题,每题1分,共10分, ,、通过( A )技术,我们可以将2D图像数据映射到3D图元上,以增强场景的真实感。 A. 纹理映射 B.模板 C. 光照 D. 混合 2、要得到如右图示的效果,glBegin() 函数的类型参数可取为( C )。 A. GL_POLYGON B. GL_LINES C. GL_LINE_STRIP D. GL_LINE_LOOP 3、要实现屏幕区域的多视口显示,应采用( C )函数。 A. glOrtho() B. gluPerspective() C. glViewport() D. gluLookAt() 4、从下面
2、四个侯选项中选择两个OpenGL语句,可以使摄像机从源位置变换到目标位置。 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); _B_; _D_; A. glTranslatef(0.0,0.0,-d) B. glTranslatef(0.0,0.0,d) -90.0,0.0,1.0,0.0) C. glRotatef(D. glRotatef(90.0,0.0,1.0,0.0) 5、由 K 个控制顶点 Pi(i=1, k) 所决定的 n 次 B 样条曲线,由 ( C ) 段n次B样条曲线段光滑连接而成。 A. k-n-2 B. k-n-1 C. k-n
3、 D. k-n+1 1 -1 0 6、使用二维图形变换矩阵: T= 如果图形的一个顶点坐标为A(6,8),则 0 1 0 0 0 1 变换后A的坐标为( C )。 A(2,-8) B. (-2,-8) C. (2,8) D. (-2,8) 7、点P的坐标为(8,6,4,2),对应的空间齐次坐标为 ( D )。 A. (8,6,4,2) B. (8,6,4) C. (4,3,2) D. (4,3,2,1) 8、当观察光照下的光滑物体表面时,在某个方向上看到高光或强光,这个现象为 ( B ) A. 漫反射 B.镜面反射 C. 环境光 D. 折射 9、双三次Bezier 曲面的4条边界都是三次Bez
4、ier 曲线, 其特征网络有 ( C ) 个顶点。 A. 9 B. 12 C. 16 D. 20 10、三维空间中的几何图元上有一点P(1,2,3), 参考海平面方程为y+1=0,等高面方程为x+1=0,则P点的纹理坐标P(s,t)为 ( A )。 A. P(2,3) B. P(3,2) C. P(-1,-1) D. P(1,1) 11、OpenGL默认情况下显示模式为( A )。 A. 单缓存模式 B. 双缓存模式 C. RGB颜色模式 D. 深度测试模式 12、OpenGL包含200多个函数,其中gluLookAt()属于( C )种函数。 A. 图元函数 B. 属性函数 C. 观察函数
5、D. 控制函数 13、位图位置由光栅位置决定,指定光栅位置的函数是( B )。 A. glTranslatef() B. glRasterPos() C. glRotatef() D. glRasterPosition() 14、由 K 个控制顶点 Pi(i=1, k) 所决定的 n 次 B 样条曲线,由 ( C ) 段n次B样条曲线段光滑连接而成。 A. k-n-2 B. k-n-1 C. k-n D. k-n+1 0 -1 0 15、使用二维图形变换矩阵: T= 如果图形的一个顶点坐标为A(6,8),则 1 0 0 1 变换后A的坐标为( C )。 A(8,-6) B. (-6,8) C.
6、 (-8,6) D. (6,-8) 6、点P的坐标为(8,6,2),对应的空间齐次坐标为 ( A )。 1A. (8,6,2,1) B. (8,6,2,0) C. (4,3,1,1) D. (4,3,1,0) 17、材质属性应与光照属性相匹配,如果需要指定一个面片在红光源照射下呈现黄色,应将面片材质的漫反射和环境反射属性指定为 ( B ) A. 红色 B. 绿色 C. 兰色 D. 白色 18、三次Bezier 曲线由 ( D ) 个控制点确定。 A. 1 B. 2 C. 3 D. 4 19、下面哪些不是OpenGL标准几何元素的绘制模式, ( A ) A. GL_FOG(雾化处理,不是绘图模式
7、) B. GL_LINE_STRIP(不闭合折线) C. GL_POINTS(单个顶点集) D. GL_TRIANGLE_FAN(扇形连续填充三角形串) 二、 填空题(每空1分,共20分) 1、 OpenGL有两条平行的流水线,一条是_几何流水线_,另一条是_像素流水线_。 2、 OpenGL函数库主要分为三类:_核心库_、_工具库_、_辅助库_。 3、 如果有glOrtho(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0),则近栽剪面的左下角坐标为 _(-1.5, -1.5, 10.0)_,右上角坐标为_(1.5,1.5,10.0)_;远裁剪面的左下角的坐标为_(-1.5
8、,-1.5,-10.0)_,右上角的坐标为_(1.5,1.5,-10.0)_。 4、 绘制真实感图形主要进行两种操作:_设置光源_和_设置材质_。 5、 在OpenGL中,每个光源包括以下属性_颜色_、_位置_、_方向_。 6、 OpenGL对光照效果的计算是由四个不同的光照分量叠加而成的,即:_环境光_、_漫反射光_、_镜面反射光_、_发射光_。 7、 在设置了光源属性以后,必须打开光源才能使光源有效,启用光源,即调用函数_glEnable(GL_GLIGHTING)_。 8、 写出实现沿x轴正方向平移5个单位的函数语句_glTranslatef(5.0, 0.0, 0.0)_。 9、 Op
9、enGL有两个重要优点。首先,OpenGL非常接近底层_硬件_,使得用OpenGL编写的程序具有较高的运行效率;其次,OpenGL易于_掌握_和_使用_。 10、 出于效率考虑,OpenGL将绘制命令做了缓冲处理。单缓冲可通过调用_glFlush()_函数,双缓冲可通过_glutSwapBuffer()_函数,强制绘制器将结果立即输出。 11、 如果有glFrustum(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0),则近栽剪面的左下角坐标为 _(-1.5, -1.5, 10.0)_,右上角坐标为_(1.5,1.5,10.0)_;远裁剪面的左下角的坐标为_(-1.5,-1
10、.5,-10.0)_,右上角的坐标为_(1.5,1.5,-10.0)_。 12、OpenGL中所需的坐标系变换由两个矩阵决定,即_模型视图矩阵_和_ 投映矩阵_。 13、GLU提供了三种类型的二次曲面,即_球体_、_圆柱体_和_圆盘_。 14、仿射变换是操纵几何对象,为场景制作动画效果及获取理想视图的关键,主要有_平移_、_旋转_和_缩放_。 、OpenGL通过一个综合了_漫反射_、_镜面反射_、_环境光_以及_发射光_等多种因素的光照模15型来模拟现实世界中我们所看到的颜色。 16、绘制曲线时,通过预先设置的四个控制点,可绘制_贝塞尔曲线_或_插值曲线_或_B样条曲线_。 三、 判断题,对的
11、打 ?,错的打 ,每题,分,共,:分, 1、 OpenGL只能画二维图形,不能画三维图形。 ( ) 2、 齐次坐标 (1, 2, 3, 0) 表示三维空间的矢量 (1, 2, 3) ( ? ) 3、 消隐算法中,场景里的多边形在Z-Buffer算法中是要求排序的,而在画家方法中就不用排序了。 ( ) 4、 所有图形都可以看成是由直线段组成的。 ( ) 5、 图形变换有两种形式:视景体坐标变换和模型视图变换。 ( ? ) 6、 自由曲线可以用一条标准代数多项式方程来描述。 ( ? ) 7、 B曲线具有对称性质。 ( ? ) 8、 齐次坐标可表示图形中无穷远点。 ( ? ) 9、 组合变换就是由若
12、干个基本的几何变换组合而成。 ( ) 10、投影(project)是一种使三维对象映射为二维对象的变换。 ( ? ) 11、OpenGL中点和直线的大小和宽度都是1个像素。 ( ) 12、 启用光照后,glColor3f()函数将全部失效,面片颜色应由材质函数来完成。 ( ? ) 13、 几何图元纹理映射时不会发生绮变。 ( ) 14、 一个复杂的几何图元可以分解成许多简单的图元并保存在显示列表中。 ( ? ) 15、 几何图元除仿射变换外,就没有其他变换了。 ( ) 16、 离散图元的光栅化位置不受模型视图矩阵和投影矩阵的影响。 ( ) 17、 通过修改glLookAt()函数参数,可以改变
13、虚拟摄像机的位置和朝向。 ( ? ) 18、 光照和材质不是OpenGL状态的一部分,法向量更不是。 ( ) 19、 OpenGL只能绘制曲线不能绘制曲面。 ( ) 20、绘制曲线时,插值曲线不保证连续,贝塞尔曲线不保证光滑,B样条曲线可保证连续且光滑。 ( ? ) 四、 程序设计题,共6:分, 1、右图示的某程序菜单用鼠标右键控制。要求编写用glut库函数实现该菜单功能的OpenGL程序。 #include #include GLint MainMenu,SubMenu1,SubMenu2; void SubMenu1_Fun(GLint val) switch(val) case 1: p
14、rintf(这是子菜单Spot的Expoint+项!nr); break; case 2: printf(这是子菜单Spot的EXPOINT-nr); break; case 3: printf(这是子菜单Spot的CUTOFF+!nr); break; case 4: printf(这是子菜单Spot的CUTOFF-!nr); break; default: printf(这是子菜单Spot的其他项!nr); void SubMenu2_Fun(GLint val) switch(val) case 1: printf(这是子菜单Colors的Red!nr); break; case 2:
15、printf(这是子菜单Colors的Green!nr); break; case 3: printf(这是子菜单Colors的Blue!nr); break; default: printf(这是子菜单Colors的其他项!nr); void Menu_Func(GLint val) switch(val) case 1: printf(这是主菜单的Spotnr); break; case 2: printf(这是主菜单的Colorsnr); break; default: printf(这是主菜单其他项nr); void myDisp(void) glClear(GL_COLOR_BUFF
16、ER_BIT); glFlush(); int main(int argc,char * argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE); glutInitWindowPosition(200,100); glutInitWindowSize(400,300); glutCreateWindow(多级菜单示例!); SubMenu1=glutCreateMenu(SubMenu1_Fun); glutAddMenuEntry(Expoint+,1); glutAddMenuEntry(Expoint-,
17、2); glutAddMenuEntry(Cutoff+,3); glutAddMenuEntry(“Cutoff-“,4); SubMenu2=glutCreateMenu(SubMenu2_Fun); glutAddMenuEntry(Red,1); glutAddMenuEntry(Green,2); glutAddMenuEntry(Blue,3); MainMenu=glutCreateMenu(Menu_Func); glutAddSubMenu(Spot,SubMenu1); glutAddSubMenu(Colors,SubMenu2); glutAttachMenu(GLUT
18、_RIGHT_BUTTON); glutDisplayFunc(myDisp); glutMainLoop(); 2、 读下面程序,在右边空白处用文字和图示将程序函数模块主要功能及运行结果描述出来。 #include GLfloat planes=-1.0,0.0,1.0,0.0; GLfloat planet=0.0,-1.0,0.0,1.0; static GLfloat theata=0.0,0.0,0.0; static GLint axis=2; GLubyte image64643; void init(void) Init函数主要功能有: GLint i,j,c; 1、 初始化图
19、片位图 for(i=0;i64;i+) 2、 启用深度测试和融合 3、 设置解压缩像素贮存格式 4、 启用纹理,设置相关参数 for(j=0;j360.0)theataaxis-=360.0; 2、 重新刷新当前窗口 glutPostRedisplay(); void mouse(int btn,int state,int x,int y) if(btn=GLUT_LEFT_BUTTON&state=GLUT_DOWN) Mouse函数主要功能有: axis=0; 1、 响就鼠标事件 if(btn=GLUT_MIDDLE_BUTTON&state=GLUT_DOWN) 2、 通过左中右键改变旋
20、转axis=1; 轴 if(btn=GLUT_RIGHT_BUTTON&state=GLUT_DOWN) axis=2; void myReshape(int w,int h) MyReshape函数主要功能有: glViewport(0,0,w,h); 1、 响应窗口变化事件 glMatrixMode(GL_PROJECTION); 2、 设置视口位置和大小 glLoadIdentity(); 3、 设置正交视景体,确保绘制图形保持刚性变换 if(w=h) 4、 设置模型视图矩阵 glOrtho( 5、 自动调用display函数 -2.0, 2.0, -2.0*(GLfloat)h/(GL
21、float)w,2.0*(GLfloat)h/(GLfloat)w,-10.0, 10.0); else glOrtho(-2.0*(GLfloat)w/(GLfloat)h,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0,-10.0,10.0); glMatrixMode(GL_MODELVIEW); void display(void) glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); Display函数主要功能有: 1、 清除颜色缓冲区和深度缓冲区内容 glRotatef(thea
22、ta0,1.0,0.0,0.0); 2、 初始化当前矩阵变换 glRotatef(theata1,0.0,1.0,0.0); 3、 设置X、Y、Z轴旋转变换矩阵 4、 绘制茶壶 5、 交换前后台缓存内容,执行所有OpenGL命令,并将最后结果在当前窗口中显示出来 glRotatef(theata2,0.0,0.0,1.0); glutSolidTeapot(1.0); glutSwapBuffers(); void main(int argc,char *argv) glutInit(&argc,argv); glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|
23、GLUT_DEPTH); glutInitWindowSize(500,500); glutCreateWindow(旋转的纹理茶壶.); glutReshapeFunc(myReshape); Main函数主要功能有: glutDisplayFunc(display); 1、 初始化OpenGL环境 glutIdleFunc(spinCube); 2、 初始化显示模式为双缓存、RGBA颜色和深度测试 glutMouseFunc(mouse); 3、 初始化创建窗口 glutKeyboardFunc(key); 4、 注册窗口回调函数、显示回调函数、系统空闲回调函数、鼠标回调函glClearC
24、olor(1.0,1.0,1.0,1.0); 数和键盘回调函数 5、 调用初始化函数init init(); 6、 调用窗口消息循环函数,监控窗口事件 glutMainLoop(); 3、如右图所示,假定将正方形的4个顶点定义为一个单位圆周上的4个等间隔点,试编写OpenGL程序,使得正文形能按角旋转(注意旋转角可自定义大小)。 #include #include #define RAD 0.017453 GLfloat theata=0.0; Void myDisp(void) glClear(GL_COLOR_BUFFER_BIT); glBegin(GL_POLYGON); glVert
25、ex2f(cos(RAD*theata,sin(RAD*theata); glVertex2f(-sin(RAD*theata),cos(RAD*theata); glVertex2f(-cos(RAD*theata),-sin(RAD*theata); glVertex2f(sin(RAD*theata),-cos(RAD*theata); glEnd(); glFlush(); Void myIdle(void) Theata+=2.0; If(theata360) theata-=360; glPostRedisplay(); Int main(int argc,char * argv)
26、 glutInit(&argc,argv); glutInitDisplayModel(GLUT_SINGLE|GLUT_RGB); glutInitWindowPosition(0.0); glutInitWindowSize(400,300); glutCreateWindow(“这是一个旋转的矩形!”); glutDisplayFunc(myDisp); glutIdleFunc(myIdle); glutMainLoop(); 4、 读下面程序,在右边方框处用文字将程序函数模块主要功能描述出来。,,:分, #include #include #include #include GLint PWidth,PHeight,MaxVal,PSize; GLfloat scale; GLuint * image; void getPic(void) getPic() 函数主要功能: GLuint err; FILE * fd; 1、 从PPM文件中获取图片数据,并保存在数组image中; GLint i; 2、 指定纹理缩放因子scale的大小。 char c; char b100; wchar_t d100; GLint red,green,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1