OpenGL试题库Word下载.docx
- 文档编号:8003805
- 上传时间:2023-05-09
- 格式:DOCX
- 页数:19
- 大小:195KB
OpenGL试题库Word下载.docx
《OpenGL试题库Word下载.docx》由会员分享,可在线阅读,更多相关《OpenGL试题库Word下载.docx(19页珍藏版)》请在冰点文库上搜索。
C.k-n
-10
15、使用二维图形变换矩阵
A.(8,-6)B.
(-6
,8)
C.(-8,6)
D.(6,-8)
16、点P的坐标为(8,6,2),
对应的空间齐次坐标为(
A)。
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.1B.2C.3D.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、仿射变换是操纵几何对象,为场景制作动画效果及获取理想视图的关键,主要有__平移__、__旋转__
和__缩放__。
15、OpenGL通过一个综合了__漫反射__、__镜面反射__、__环境光__以及__发射光__等多种因素的光照模型来模拟现实世界中我们所看到的颜色。
16、绘制曲线时,通过预先设置的四个控制点,可绘制__贝塞尔曲线__或__插值曲线__或_B样条曲线_。
三、判断题(对的打√,错的打×
,每题1分,共10分)
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()函数将全部失效,面片颜色应由材质函数来完成。
(√)
一个复杂的几何图元可以分解成许多简单的图元并保存在显示列表中。
#include<
gl\glut.h>
stdio.h>
GLintMainMenu,SubMenu1,SubMenu2;
voidSubMenu1_Fun(GLintval){switch(val){case1:
printf("
这是子菜单Spot的Expoint+项!
\n\r"
);
break;
case2:
这是子菜单Spot的EXPOINT-\n\r"
break;
case3:
这是子菜单Spot的CUTOFF+!
case4:
这是子菜单Spot的CUTOFF-!
default:
这是子菜单Spot的其他项!
}}
voidSubMenu2_Fun(GLintval){switch(val){case1:
这是子菜单Colors的Red!
这是子菜单Colors的Green!
这是子菜单Colors的Blue!
这是子菜单Colors的其他项!
}
voidMenu_Func(GLintval){switch(val){case1:
printf("
这是主菜单的Spot\n\r"
这是主菜单的Colors\n\r"
这是主菜单其他项\n\r"
}voidmyDisp(void){glClear(GL_COLOR_BUFFER_BIT);
glFlush();
intmain(intargc,char**argv){glutInit(&
argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
glutInitWindowPosition(200,100);
glutInitWindowSize(400,300);
glutCreateWindow("
多级菜单示例!
"
SubMenu1=glutCreateMenu(SubMenu1_Fun);
glutAddMenuEntry("
Expoint+"
1);
Expoint-"
2);
Cutoff+"
3);
glutAddMenuEntry(“Cutoff-“,4);
SubMenu2=glutCreateMenu(SubMenu2_Fun);
Red"
Green"
Blue"
MainMenu=glutCreateMenu(Menu_Func);
glutAddSubMenu("
Spot"
SubMenu1);
Colors"
SubMenu2);
glutAttachMenu(GLUT_RIGHT_BUTTON);
glutDisplayFunc(myDisp);
glutMainLoop();
2、读下面程序,在右边空白处用文字和图示将程序函数模块主要功能及运行结果描述出来。
gl/glut.h>
GLfloatplanes[]={-1.0,0.0,1.0,0.0};
GLfloatplanet[]={0.0,-1.0,0.0,1.0};
staticGLfloattheata[]={0.0,0.0,0.0};
staticGLintaxis=2;
GLubyteimage[64][64][3];
Init函数主要功能有:
1、初始化图片位图
2、启用深度测试和融合
3、设置解压缩像素贮存格式
4、启用纹理,设置相关参数
voidinit(void){
GLinti,j,c;
for(i=0;
i<
64;
i++){for(j=0;
j<
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;
}glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LEQUAL);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glEnable(GL_TEXTURE_2D);
glTexImage2D(GL_TEXTURE_2D,0,3,64,64,0,GL_RGB,GL_UNSIGNED_BYTE,image);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
Key函数主要功能有:
1、响应键盘事件,按键‘1'
,开始旋转图形
2、按键‘2'
,停止旋转图形
voidkey(unsignedchark,intx,inty){
if(k=='
1'
)glutIdleFunc(spinCube);
2'
)glutIdleFunc(NULL);
spinCube函数主要功能有:
1、改变当前旋转轴旋转角,限制旋转角在0~360度范围内
2、重新刷新当前窗口
voidspinCube(void){theata[axis]+=2.0;
if(theata[axis]>
360.0)theata[axis]-=360.0;
glutPostRedisplay();
Mouse函数主要功能有:
1、响就鼠标事件
2、通过左中右键改变旋转轴
voidmouse(intbtn,intstate,intx,inty){
if(btn==GLUT_LEFT_BUTTON&
&
state==GLUT_DOWN)axis=0;
if(btn==GLUT_MIDDLE_BUTTON&
state==GLUT_DOWN)axis=1;
if(btn==GLUT_RIGHT_BUTTON&
state==GLUT_DOWN)axis=2;
voidmyReshape(intw,inth){
glViewport(0,0,w,h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
if(w<
=h)
glOrtho(
-2.0,2.0,
MyReshape函数主要功能有:
1、响应窗口变化事件
2、设置视口位置和大小
3、设置正交视景体,确保绘制图形保持刚性变换
4、设置模型视图矩阵
5、自动调用display函数
-2.0*(GLfloat)h/(GLfloat)w,2.0*(GLfloat)h/(GLfloat)w,-10.0,10.0);
elseglOrtho(-2.0*(GLfloat)w/(GLfloat)h,2.0*(GLfloat)w/(GLfloat)h,-2.0,2.0,-10.0,10.0);
voiddisplay(void){
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
Display函数主要功能有:
1、清除颜色缓冲区和深度缓冲区内容
2、初始化当前矩阵变换
3、设置X、Y、Z轴旋转变换矩阵
4、绘制茶壶
5、交换前后台缓存内容,执行所有OpenGL命令,并将最后结果在当前窗口中显示出来
glRotatef(theata[0],1.0,0.0,0.0);
glRotatef(theata[1],0.0,1.0,0.0);
glRotatef(theata[2],0.0,0.0,1.0);
glutSolidTeapot(1.0);
glutSwapBuffers();
voidmain(intargc,char**argv){
glutInit(&
glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA|GLUT_DEPTH);
glutInitWindowSize(500,500);
glutCreateWindow("
旋转的纹理茶壶..."
Main函数主要功能有:
1、初始化OpenGL环境
2、初始化显示模式为双缓存、RGBA颜色和深度测试
3、初始化创建窗口
4、注册窗口回调函数、显示回调函数、系统空闲回调函数、鼠标回调函数和键盘回调函数
5、调用初始化函数init
6、调用窗口消息循环函数,监控窗口事件
4个顶点定义为一个单位圆周上的4个等间隔点,试编写OpenGL程序,
math.h>
#defineRAD0.017453
GLfloattheata=0.0;
VoidmyDisp(void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glVertex2f(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();
VoidmyIdle(void){
Theata+=2.0;
If(theata>
360)theata-=360;
glPostRedisplay();
Intmain(intargc,char**argv){glutInit(&
glutInitDisplayModel(GLUT_SINGLE|GLUT_RGB);
glutInitWindowPosition(0.0);
glutInitWindowSize(400,300);
glutCreateWindow(“这是一个旋转的矩形!
”);
glutIdleFunc(myIdle);
glutMainLoop();
4、读下面程序,在右边方框处用文字将程序函数模块主要功能描述出来。
(40分)
Windows.h>
GL/glut.h>
stdlib.h>
GLintPWidth,PHeight,MaxVal,PSize;
GLfloatscale;
GLuint*image;
voidgetPic(void){
GLuinterr;
FILE*fd;
GLinti;
charc;
charb[100];
wchar_td[100];
GLintred,green,blue;
请输入PPM文件名:
\n"
scanf_s("
%s"
b,sizeof(b));
err=fopen_s(&
fd,b,"
r"
if(err){
swprintf_s(d,sizeof(d),L"
错误代码是:
%d"
err);
MessageBox(NULL,d,L"
提示!
MB_OKCANCEL);
exit(0);
fscanf_s(fd,"
%[^\n]"
if(b[0]!
='
P'
||b[1]!
3'
){
%sisnotaPPMfile!
b);
%sisaPPMfile\n"
%c"
&
c,sizeof(c));
while(c=='
#'
%s\n"
ungetc(c,fd);
fscanf_s(fd,"
%d%d%d"
PWidth,&
PHeight,&
MaxVal);
PSize=PWidth*PHeight;
image=(GLuint*)malloc(3*sizeof(GLuint)*PSize);
PSize;
i++){
red,&
green,&
blue);
image[3*PSize-3*i-3]=red;
image[3*PSize-3*i-2]=green;
image[3*PSize-3*i-1]=blue;
scale=255./MaxVal;
init()函数主要功能:
1、清除背景颜色为黑色,指定当前绘制颜色为白色;
2、设置二维纹理映射参数。
voidinit(void){
glClearColor(0.0,0.0,0.0,1.0);
glColor3f(1.0,1.0,1.0);
glPixelTransferf(GL_RED_SCALE,scale);
glPixelTransferf(GL_GREEN_SCALE,scale);
glPixelTransferf(GL_BLUE_SCALE,scale);
glPixelStorei(GL_UNPACK_SWAP_BYTES,GL_TRUE);
glPixelStorei(GL_UNPACK_ALIGNMENT,1);
glTexI
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- OpenGL 试题库
![提示](https://static.bingdoc.com/images/bang_tan.gif)