2024年3月17日发(作者:)

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、从下面四个侯选项中选择两个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 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条边

界都是三次Bezier 曲线, 其特征网络有 ( 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. 观察函数 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. (-8,6) D. (6,-8) 6、点P的坐标为(8,6,2),对应

的空间齐次坐标为 ( A )。 1

A. (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(雾化处理,不是绘图模式) 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,-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、 OpenGL有两个重要优点。首先,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.5,-10.0)__,右上角的坐标为__(1.5,1.5,-10.0)___。

12、OpenGL中所需的坐标系变换由两个矩阵决定,即__模型视图矩阵__和_ 投

映矩阵__。 13、GLU提供了三种类型的二次曲面,即____球体____、____圆柱体

____和____圆盘____。 14、仿射变换是操纵几何对象,为场景制作动画效果及获

取理想视图的关键,主要有__平移__、__旋转__

和__缩放__。

、OpenGL通过一个综合了__漫反射__、__镜面反射__、__环境光__以及__发射

光__等多种因素的光照模15

型来模拟现实世界中我们所看到的颜色。

16、绘制曲线时,通过预先设置的四个控制点,可绘制__贝塞尔曲线__或__插

值曲线__或_B样条曲线_。 三、 判断题,对的打 ?,错的打 ×,每题,分,共,:

分,

1、 OpenGL只能画二维图形,不能画三维图形。 ( × ) 2、 齐次坐标 (1, 2,

3, 0) 表示三维空间的矢量 (1, 2, 3) ( ? ) 3、 消隐算法中,场景里的多边形

在Z-Buffer算法中是要求排序的,而在画家方法中就不用排序了。

( × )

4、 所有图形都可以看成是由直线段组成的。 ( × ) 5、 图形变换有两种形

式:视景体坐标变换和模型视图变换。 ( ? ) 6、 自由曲线可以用一条标准代数多

项式方程来描述。 ( ? ) 7、 B曲线具有对称性质。 ( ? ) 8、 齐次坐标可表示

图形中无穷远点。 ( ? ) 9、 组合变换就是由若干个基本的几何变换组合而成。

( × ) 10、投影(project)是一种使三维对象映射为二维对象的变换。 ( ? )

11、OpenGL中点和直线的大小和宽度都是1个像素。 ( × ) 12、 启用光照后,

glColor3f()函数将全部失效,面片颜色应由材质函数来完成。 ( ? ) 13、 几何

图元纹理映射时不会发生绮变。 ( × )

14、 一个复杂的几何图元可以分解成许多简单的图元并保存在显示列表中。

( ? ) 15、 几何图元除仿射变换外,就没有其他变换了。 ( × ) 16、 离散图元

的光栅化位置不受模型视图矩阵和投影矩阵的影响。 ( × ) 17、 通过修改

glLookAt()函数参数,可以改变虚拟摄像机的位置和朝向。 ( ? ) 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:

printf("这是子菜单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:

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_BUFFER_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-",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_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 image[64][64][3];

void init(void){ Init函数主要功能有: GLint i,j,c; 1、 初始化图片位图

for(i=0;i<64;i++){ 2、 启用深度测试和融合

3、 设置解压缩像素贮存格式

4、 启用纹理,设置相关参数

for(j=0;j<64;j++){

c=(((i&0x8)==0)^((j&0x8)==0))*255;

image[i][j][0]=(GLubyte)c;

image[i][j][1]=(GLubyte)c;

image[i][j][2]=(GLubyte)c;