2016杭电《实时三维图形绘制》OpenGL课复习提纲、试题展示及参考

2019-01-05 10:50

2016学年杭州电子科技大学 《实时三维图像绘制》考试

红色标记表示考到了,都是简答题,有超纲的(老师给的提纲) 超纲题:

【1】写出至少三种OpenGL矩阵堆栈,并说明作用?

【2】请完整写出用glut和OpenGL编写的程序:绘制一个平面正三角形,使它绕着过它中心的垂直于平面的轴自动旋转。

1、OpenGL中能渲染的基本元素是什么?GLU 可以渲染哪些基本元素? 答: OPENGL基本元素: GL_POINTS、

GL_LINES、GL_LINE_STRIP 、GL_LINE_LOOP

GL_TRIANGLES、GL_TRIANGLE_STRIP 、GL_TRIANGLE_FAN GL_QUADS、GL_QUAD_STRIP、GL_POLYGON

GLU基本元素:

NURBS曲线曲面,二次曲面等

2、简述OpenGL函数的语法特点?

答: OpenGL函数以前缀gl开头,并把组成函数的每个单词首字母用大写形式表示(如glClearColor)。类似地,还定义了一些以前缀GL_开头的常量,所有单词都使用大写形式,并以下划线分隔(如GL-COLOR-BUFFER-BIT)。

3、用框图说明OpenGL的渲染流程,并简要说明每个坐标系。

裁剪坐标 视觉坐标 设备坐标 物体坐标

投影变换 模型视图变换 透视除法 物体空间 裁剪空间 视点空间 归一化设备空间

视口变换

光栅化

片元测试 屏幕空间 片元处理 帧缓冲区 窗口坐标

4、写出OpenGL中局部光照的方程,要包含的系数有光源参数、材料参数、聚光灯的参数、衰减参数等,方程要表示是多个光源的。 答: 顶点颜色=顶点处的材料发射颜色+全局环境光(在顶点处根据材料环境颜色属性进行缩放)+经过适当衰减的来自所有光源的环境、散射、镜面光成分

5、在OpenGL中,使用光照的步骤是什么? 答: 1、定义每个物体的每个顶点的法线向量。

2、创建和选择一个或多个光源,并设置它们的位置。 3、创建和选择一种光照模型。 4、定义场景中物体的材料属性。

6、分析程序并计算

请看下面的一段程序,并计算三个顶点○1、○2和○3处的光照的颜色值。 void init(void) {

GLfloat mat_ambient[] = { 0.2, 0.2, 0.2, 1.0 }; GLfloat mat_diffuse[] = { 0.8, 0.8, 0.8, 1.0 }; GLfloat mat_emission[] = { 0.0, 0.0, 0.0, 1.0 }; GLfloat mat_specular[] = { 0.3, 0.3, 0.3, 1.0 }; GLfloat mat_shininess[] = { 2.0 };

GLfloat light_position[] = { 1.0, 1.0, 1.0, 0.0 }; GLfloat light_ambient[] = {0.2, 0.2, 0.2, 1.0}; GLfloat light_diffuse[] = {1.0, 1.0, 1.0, 1.0}; GLfloat light_specular[] ={1.0, 1.0, 1.0, 1.0}; GLfloat lmodel_ambient[] = {0.2, 0.2, 0.2, 1.0}; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH);

glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient); glMaterialfv(GL_FRONT, GL_DIFFUSE, mat_diffuse); glMaterialfv(GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv(GL_FRONT, GL_EMISSION, mat_emission);

glMaterialfv(GL_FRONT, GL_SHININESS, mat_shininess);

glLightfv(GL_LIGHT0, GL_POSITION, light_position); glLightfv(GL_LIGHT0, GL_AMBIENT, light_ambient); glLightfv(GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv(GL_LIGHT0, GL_SPECULAR, light_specular);

glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient); glEnable(GL_LIGHTING); glEnable(GL_LIGHT0);

glEnable(GL_DEPTH_TEST); }

void display(void) {

glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBegin(GL_TRIANGLES); glNormal3f(0.0f, 0.0f, 1.0f); glVertex3f(0.0, 0.0, 0.0); //1 glVertex3f(1.0, 0.0, 0.0); //2 glVertex3f(1.0, 1.0, 0.0); //3 glEnd(); glFlush (); }

void reshape (int w, int h) {

glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h)

glOrtho (-1.5, 1.5, -1.5*(GLfloat)h/(GLfloat)w,1.5*(GLfloat)h/(GLfloat)w, -10.0, 10.0); else

glOrtho (-1.5*(GLfloat)w/(GLfloat)h,1.5*(GLfloat)w/(GLfloat)h, -1.5, 1.5, -10.0, 10.0);

glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }

int main(int argc, char** argv) {

glutInit(&argc, argv);

glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]);

init ();

glutDisplayFunc(display); glutReshapeFunc(reshape); glutMainLoop(); return 0; }

答:把各个参数带到第四题的公式里,不要求算出结果

7、在OpenGL中,使用纹理的步骤是什么?纹理坐标和纹理都可以通过程序计算出来,自动生成纹理的原理是什么?

答:步骤: 1、创建纹理对象,并为它指定一个纹理。 2、确定纹理如何应用到每个像素上。 3、启用纹理贴图功能。

4、绘制场景,提供纹理坐标和几何图形坐标。

原理:自动生成纹理由glTexGen()函数来实现。要自动生成纹理坐标,首先要指定以什么样的模式来生成纹理坐标。纹理坐标生成模式有:

GL_OBJECT_LINEAR、GL_EYE_LINEAR、GL_SPHERE_MAP、 GL_REFLECTION_MAP和GL_NORMAL_MAP. 1.GL_OBJECT_LINEAR

在这个模式下,其纹理生成函数是顶点(x0,y0,z0,w0)的物体坐标的线性组合: 生成的坐标=p0*x0+p1*y0+p2*z0+p3*w0;

其中p0,p1,p2,p3的值是由glTexGen*v()函数的param参数提供的。 2.GL_EYE_LINEAR

在这个模式下,其纹理生成函数是顶点的视觉坐标(xe,ye,ze,we)的线性组合:生成的坐标=p0'*xe+p1'*ye+p2'*ze+p3'*we;

其中p0’,p1’,p2’,p3’的值是由glTexGen*()函数的param参数提供的。 3.GL_SPHERE_MAP和GL_REFLECTION_MAP 主要用于生成球体纹理 4.GL_NORMAL_MAP

主要用于生成立方图纹理

8、帧缓存有几种,什么叫片元,片元的测试和操作有哪些? 【超纲】每种有什么作用?

答:帧缓存有:颜色缓存、深度缓存、模板缓存、累积缓存。

片元:图元光栅化的结果,每个片元都对应于一个像素,包括颜色、深度,有时还包括纹理坐标。

片元的测试:裁剪测试、alpha测试、模板测试、深度测试; 操作有:混合、抖动、逻辑操作。

9、采用GPU编程,请说明Vertex Shader 和 Fragment Shader 的输入输出坐标系是什么? 输入输出的主要参数是什么?

答:在Vertex Shader中的输入坐标为局部坐标系(模型坐标系),输出坐标为裁剪坐标系。

Fragment Shader 的输入为顶点管线输出的迭代值,包括纹理坐标、颜色信息等,输出为片元最终的颜色、深度以及输出到多个缓冲区。

10、如何实现纹理的反走样?说明其原理。 答:Mipmap技术可以实现纹理反走样,其指定一系列预先过滤的分辨率递减的纹理图像,在使用mipmap时,它会根据被贴图的物体大小自动确定使用哪个纹理。通过这种方法,纹理图像中的细节层就能适应绘制到屏幕上的图像。

11、写出场景的反走样算法,并说明其原理。

答:对场景的反走样,通常采用多重采样的方法,即使用额外的颜色,深度和模板信息对图元进行抗锯齿处理。每个片元根椐子像素样本的数量和信息来计算,也就是根据一个多重采样缓冲区所保存的样本来计算。

还有一种扰动视点的方法,也就是多次绘制这个场景,每次绘制时,对视点进行抖动,作一定轻微的偏移,当整个渲染过程完结后,再把所有图象叠加起来,由于每个图象的位置不同,可以减轻锯齿状。


2016杭电《实时三维图形绘制》OpenGL课复习提纲、试题展示及参考.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:七上 第12课学案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: