南开大学《3D游戏软件设计》课程期末复习资料

作者: 奥鹏周老师 分类: 南开大学 发布时间: 2019-07-28 22:00
《3D游戏软件设计》课程第一版
         
            期末复习资料

  《3D游戏软件设计》课程第一版(PPT)讲稿章节目录:

第1章  OpenGL简介
1.1  OpenGL简介
1.2  OpenGL的功能及作业流程
1.3  OpenGL函数库
1.4  OpenGL开发环境
1.5  创立一个简略的OpenGL工程

第2章  根本图元制作
2.1  点、线段的制作
2.2   虚线、多边形的制作

第3章  色彩
  3.1  核算机色彩的概念
  3.2  OpenGL的色彩形式
3.3  两种色彩形式的应用
  3.4  色彩应用举例
   3.5  明暗处理

第4章  改换
   4.1  用相机模仿的思路来理解改换
   4.2  OpenGL坐标系
  4.3  三维图形显现流程
  4.4  OpenGL几许改换
  4.5  OpenGL视图改换
  4.6  OpenGL投影改换
  4.7  OpenGL裁剪改换
  4.8  OpenGL视口改换
  4.9  OpenGL矩阵仓库
  4.10  OpenGL改换实例

第5章  动画
    5.1  核算机动画
5.2  双缓冲技能
5.3  GLUT窗口动画的完成

第6章  制作三维图形
   6.1  制作立方体
   6.2  在3D空间用OpenGL自带的库函数制作

第7章  三维场景漫游
   7.1  制作一个简略的三维场景
7.2  第一人称视角行走的完成办法
7.3  键盘控制
7.4  鼠标控制

第8章  光照
   8.1  根本概念
   8.2  光源
   8.3  原料
   8.4  光照模型

第9章  纹路
   9.1  纹路根本概念
   9.2  OpenGL纹路完成进程(PPT02 ~ PPT04)
   9.3  OpenGL纹路实例

第10章  显现列表
   10.1  显现列表概念
   10.2  运用显现列表的进程
   10.3  显现列表的应用
   10.4  显现列表实例

第11章  混合
   11.1  混合的概念
   11.2  混合的进程
   11.3  设置混合因子的函数
   11.4  混合方程式函数
   11.5  混合的应用
   11.6  三维混合
第12章  树立非控制台的windows程序框架
12.1  windows应用程序根本框架
12.2  根据windows应用程序框架的OpenGL程序设计

第13章  纹路混合综合实例

一、        客观部分:(单项挑选、多项挑选、不定项挑选、判断)
此类标题制作阐明:请在此处增加查核常识点中触及公式明示。请设置部分例题进行练习把握,此例题能够为任课教师供应的题库标题,选用题库标题需低于题库本项标题的30%。标题内容核算进程及答案请删去,不供应给学生。样例如下:
★查核常识点: OpenGL状况机
拜见讲稿章节:1
    OpenGL是一个状况机。能够经过glEnable来启用状况,glDisable来禁用状况。

例题:
单选题:
1、         若要启用光源,需求调用以下哪个函数?(  )
A.glEnable(GL_LIGHTING)                   B.  glEnable(GL_TEXTURE_2D)
C.  glEnable(GL_BLEND)                    D.  glEnable(GL_CLIP_PLANE)

★查核常识点: OpenGL库函数的特点
拜见讲稿章节:1
OpenGL库函数用后缀表明进口参数类型。i表明参数类型为整数型,f表明为float类型,v表明参数可用数组来替代一系列单个参数值。参数类型后缀前带有数字2、3、4,2代表二维,3代表三维,4代表alpha值。
如图所示:

例题:
单选题:
1、        OpenGL库函数中后缀字幕v表明函数参数可用类型为()。
A.        整型数据
B.        浮点型数据
C.        数组型数据
D.        三维坐标

★查核常识点: 根本图元的制作
拜见讲稿章节:2
制作点:glVertex*()
点巨细设置函数:glPointSize(float size),留意,该函数需求放在制作点函数之前。
制作线段:线段连接办法GL_LINES  GL_LINE_STRIP  GL_LINE_LOOP

    线宽度设置函数:glLineWidth(float width)
例题:
单选题:
1、要得到如右图示的作用,glBegin() 函数的类型参数可取为(  )。
A. GL_POLYGON     
B. GL_LINES
C. GL_LINE_STRIP
D. GL_LINE_LOOP

★查核常识点: 色彩形式
拜见讲稿章节:3
在OpenGL中色彩有两种形式:RGB形式和色彩索引形式。
明暗处理办法将会影响终究的色彩显现,明暗处理办法有两种:GL_FLAT平面形式和GL_SMOOTH光滑过渡形式。
例题:
单选题:
1、        在程序中制作了一个带色彩的三角形,其间三个极点分别制作三种不同的色彩,若要完成三个极点分别为三种色彩的五颜六色三角形,应调用下面哪个函数?()
A.        glColor3f()
B.        glShadeModel(GL_FLAT);
C.        glShadeMode(GL_SMOOTH);
D.        glHint()


★查核常识点: 多边形的制作
拜见讲稿章节:2
OpenGL中规定的多边形必须是凸多边形。
制作多边形时,图元极点的连接办法有:
   
   程序格局为:
    
约定“极点以逆时针次序出现在屏幕上的面”为“正面”,另一个面即为“不和”。
多边形的制作形式有:(1)填充式(默许) – GL_FILL(2)轮廓线式 – GL_LINE(3)极点式 – GL_POINT(4)镂空图案填充式,运用函数glPolygonMode(GL_FRONT, GL_FILL); 来设置。
例题:
判断题:
1.        OpenGL约定极点以逆时针次序出现在屏幕上的多边形为不和。( )

★查核常识点: 复合改换的次序
拜见讲稿章节:4
    在复合改换中,函数的调用次序与实际改换次序是相反的。“先移动后旋转”和“先旋转后移动”得到的结果不一样。
例题:
判断题:
1、OpenGL几许改换函数调用次序和料想的操作次序是一致的。( )

★查核常识点: 动画
拜见讲稿章节:5
出于效率考虑,OpenGL将制作指令做了缓冲处理,单缓冲可经过调用glFlush()函数,双缓冲可经过glutSwapBuffer()函数,强制制作器将结果立即输出。在OpenGL中要完成动画作用,需求选用双缓冲技能。在GLUT窗口形式中,能够经过函数glutInitDisplayMode(GLUT_DOUBLE)设置当时窗口形式为双缓冲形式。
例题:
挑选题:
1、在OpenGL中要完成动画作用,需求选用(  )技能
A.        单缓冲
B.        关键帧
C.        双缓冲
D.        深度缓冲

★查核常识点: 纹路界说
拜见讲稿章节:9
     纹路有一维纹路、二维纹路、三维纹路。
例题:
判断题:
1.        在OpenGL中,纹路能够是一维、二维或三维。(√)

★查核常识点: 纹路完成进程
拜见讲稿章节:9
     纹路完成进程较为杂乱,留意各个进程的函数。
(1)        启用纹路
glEnable(GL_TEXTURE_2D);
(2)        界说纹路
界说纹路的函数较为杂乱,详细看PPT中举例。
glTexImage2D()
(3)        创立纹路方针
glGenTextures(1,&texture_ID)
(4)        纹路滤镜
纹路滤镜首要包含了扩大、缩小、重复三种办法。


留意GL_REPEAT和GL_CLAMP两种不同的重复办法。
(5)        挑选纹路
glBindTexture(GL_TEXTURE_2D,texture[0]);
(6)        坐标映射
glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); 
例题:
多选题:
1、纹路滤镜函数glTexParameter能够完成对纹路的操作包含(  )
A.        扩大纹路
B.        缩小纹路
C.        重复纹路
D.        界说纹路

★查核常识点: 显现列表
拜见讲稿章节:10
在编写OpenGL程序时,遇到重复的作业,能够创立一个显现列表,把重复的作业装入其间,并在需求的地方调用这个显现列表。
显现列表的运用进程:
(1)        分配显现列表编号 glGenLists()
(2)        创立显现列表 glNewList()
(3)        调用显现列表 glCallList()
显现列表只能装入OpenGL函数,不能装入其它内容,并非一切的OpenGL函数都能够装入显现列表中。
例题:
单选题:
1、在编写OpenGL程序时,遇到重复的作业,能够经过创立(  )的办法来优化程序。
A.        函数
B.        显现列表
C.        极点数组
D.        双缓冲
判断题:
1、用于查询的函数能够被装入到显现列表中。()

★查核常识点: 深度&深度缓冲
拜见讲稿章节:11
    深度,便是在OpenGL坐标系中,像素点的z坐标间隔摄像机的间隔。摄像机或许放在坐标系的任何方位,那么就不能简略的说z数值越大或越小,便是越接近摄像机。
深度缓冲区,是这样一段数据,它记录了每一个像素间隔调查者有多近。在启用深度缓冲测验的情况下,假如即将制作的像素比本来的像素更近,则像素将被制作,不然,像素会被忽略掉,不进行制作。
例题:
单选题:
1、在OpenGL坐标系中,像素点的Z坐标间隔摄像机的间隔被称之为(  )。
A.        深度缓冲
B.        深度测验
C.        深度
D.        深度截取
2、发动深度缓存区的函数为?(  )
A.        glEnable(GL_DEPTH_CLAMP);
B.        glEnable(GL_DEPTH_TEST);
C.        glEnable(GL_CULL_FACE);
D.        glClear(GL_DEPTH_BUFFER_BIT);
3、铲除深度缓存区的函数为?(  )
A.        glEnable(GL_DEPTH_CLAMP);
B.        glEnable(GL_DEPTH_TEST);
C.        glEnable(GL_CULL_FACE);
D.        glClear(GL_DEPTH_BUFFER_BIT);

★查核常识点: 制作三维实体
拜见讲稿章节:10
能够运用glut库和aux库函数制作三维实体。如:
glutWireSphere(GLdouble radius, GLint slices, GLint stacks); 线框球
glutSolidSphere(GLdouble radius, GLint slices, GLint stacks); 实心球
glutWireCube(GLdouble size); 线框立方体
glutSolidCube(GLdouble size); 实心立方体
glutWireTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 线框圆环
glutSolidTorus(GLdouble innerRadius, GLdouble outerRadius, GLint nsides, GLint rings); 实心圆环
glutWireIcosahedron(void); 线框20面体
glutSolidIcosahedron(void); 实心20面体
glutWireOctahedron(void); 线框8面体 
glutSolidOctahedron(void); 实心8面体
例题:
单选题:
1.        以下哪个函数能够制作出一个实心球体?(  )
A.        glutWireSphere()
B.        glutSolidSphere()
C.        glutSolidCube()
D.        glutWireCone()


二、片面部分:
此类标题制作阐明:请在此处增加查核常识点中触及公式明示。请设置部分例题进行练习把握,此例题能够为任课教师供应的题库标题,选用题库标题需低于题库本项标题的30%。标题内容核算进程及答案请删去,不供应给学生。
★查核常识点: OpenGL的正确认知
拜见讲稿章节:1.1
    能准确定位OpenGL。
OpenGL是一个敞开的图形库;OpenGL是一套底层三维图形API;OpenGL是与硬件无关的软件接口。
例题:
填空
1、        OpenGL是一个       与图形的       接口,实际上便是一个三维图形和模型库,能够在恣意渠道和操作系统上运行。

★查核常识点: OpenGL函数库
拜见讲稿章节:1.3
    了解OpenGL函数库及其区别。把握库函数的特点,如前缀、后缀。
OpenGL核心库是GL;有用库是GLU;东西库是GLUT(该库函数首要供应根据窗口的东西,并且不依赖于运行环境,因而OpenGL的东西库能够在一切OpenGL渠道上运行);辅佐库AUX.
例题:
1、        OpenGL的辅佐库函数前缀是       。
2、        OpenGL中的        和        能够在一切的OpenGL渠道上运行。

★查核常识点: GLUT窗口函数
拜见讲稿章节:1.5
把握Win32 Console Application工程框架中GLUT窗口函数的运用。
如程序:
#include
void myDisplay(void)
{
        glClear(GL_COLOR_BUFFER_BIT);
        glRectf(-0.5f,-0.5f,0.5f,0.5f);
        glFlush();
}
int main(int argc,char *argv[])
{
        glutInit(&argc,argv);
        glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE);
        glutInitWindowPosition(100,100);
        glutInitWindowSize(400,400);
        glutCreateWindow("第一个opengl程序");
        glutDisplayFunc(&myDisplay);
        glutMainLoop();
        return 0;
}
该程序为最简略的根据win32控制台窗口应用程序。其间:
?        #include是将能创立窗口的GLUT库包含进来。
?        glutInit(&argc,argv)GLUT初始化
?        glutInitDisplayMode(GLUT_RGB|GLUT_SINGLE)GLUT库在创立窗口的时候运用哪种类型的显现形式,这是的标志GLUT_SINGLE告诉它运用单缓冲区窗口,并且是RGB色彩形式。
?        glutInitWindowPosition(100,100);初始化窗口在屏幕中的方位
?        glutInitWindowSize(400,400);初始化窗口的巨细
?        glutCreateWindow("第一个opengl程序");在屏幕上创立窗口,窗口的姓名将显现“第一个opengl程序”
?        glutDisplayFunc(&myDisplay);显现回调函数,即将在窗口中制作的内容需在函数myDisplay中,GLUT会自行调用。
?        glutMainLoop();消息循环
例题:
熊猫奥鹏(www.188open.com):
1、        glutInitDisplayMode()函数的作用是__________。

★查核常识点: OpenGL色彩
拜见讲稿章节:3
OpenGL色彩形式包含了:
RGB形式,即一切色彩界说全用R\G\B\Alpha三个值;能够用glColor*()来界说当时色彩。
色彩表形式,每一个像素的色彩是用色彩表中的某个色彩索引值表明。
在OpenGL中多边形的填充处理办法为明暗处理,包含两种:平面明暗处理GL_FLAT,即用单一色彩填充;滑润明暗处理GL_SMOOTH,该形式下填充色彩过渡自然连续。
例题:
熊猫奥鹏(www.188open.com):
1、        核算机色彩通常用___、____、__ ___三个值来表明。
2、几许图元的明暗处理办法是    和       。

★查核常识点: OpenGL三维烘托管线
拜见讲稿章节:4
OpenGL选用右手坐标系。
OpenGL烘托管线是指三维图形烘托的进程中显卡履行、从几许体到终究烘托图画、数据传输处理核算的进程。
烘托管线示意图见下图。

(中文烘托管线示意图见下)

其间极点改换中每个坐标系简介如下:
模型坐标系(MC):也称为物体坐标系,是特定物体相关联的坐标系。当物体位移或改变方向时,和该物体相关的坐标系也随之移动和改变方向。
(模型极点的坐标都是在模型坐标系中描绘的。)
(如“向前走一步”,则是向你的物体坐标系发指令;“前后左右”这样的概念只有物体坐标系才有含义;“向左转”是物体坐标系;“向东”是国际坐标系的概念。)
国际坐标系(WC):这是一个特别的坐标系,它树立了描绘其他坐标系所需求的参阅框架,另一方面说,能用国际坐标系描绘其他坐标系的方位,而不能用更大的坐标系来描绘国际坐标系。
视图坐标系(VC):这是一种特别的物体坐标系,该物体坐标系界说摄像机的屏幕可视区域。关于摄像机坐标系的轴向约定或许不同。
(Opengl选用右手坐标系,即摄像机在原点,X轴向右,Z轴向前/外,Y轴向上。2D屏幕上显现的内容便是3D摄像机坐标系经过投影转换出现的。)
投影坐标系(PC):将国际坐标系中的物体映射到视图坐标系(屏幕坐标系)上的办法称为投影。投影的办法包含平行投影和透视投影两种。
设备坐标系(DC):即终究出现在显现设备上的窗口坐标。Windows窗口坐标为左下角为原点,X轴向右为正,Y轴向上为正。
例题:
问答题:
1、        描绘一下OpenGL的烘托管线。

★查核常识点: 改换及改换函数
拜见讲稿章节:4
     在三维图形烘托管线中,能从模型坐标系改换到国际坐标系的改换是“模型改换(几许改换)”;将国际坐标系中的物体映射到视图坐标系的改换为“投影改换”。将投影平面上的画面映射到窗口上的改换为“视口改换”。将调查坐标系改换到国际坐标系,即调整调查视点的改换为“视图改换”,视图改换与模型改换是互逆改换。
投影改换包含正交投影和透视投影。
几许改换是操作几许方针,包含平移、旋转、缩放。

?        平移改换函数glTranslate*()
?        旋转改换函数glRotate*()
?        放缩改换函数glScale*()
?        视图改换函数gluLookAt(GLdouble eyex,Gldouble  eyey,GLdouble eyez, 
GLdouble centerx,GLdouble centery, GLdouble centerz,
GLdouble upx, GLdouble upy, Gldouble upz)
其间参数:
eyex/eyey/eyez:前三个参数表明了调查点的方位;
centerx/centery/centerz:中心三个参数表明了调查方针的方位;
upx/upy/upz:最终三个参数代表从(0,0,0)到(x,y,z)的直线,它表明了调查者以为的“上”方向。 
?        投影改换函数
要求把握各函数及参数的正确运用。
(1)        正交投影函数glOrtho(GLdouble left,Gldouble right,Gldouble bottom,GLdouble top,GLdouble near,GLdouble far)
(2)        透视投影函数glFrustum (GLdouble left,Gldouble right,  GLdouble bottom,GLdouble top,GLdouble near,GLdouble far);
(3)        透视投影函数glPerspective(GLdouble fovy,  GLdouble aspect,GLdouble zNear, GLdouble zFar)
?          视口改换函数
glViewport(GLint x,GLint y, GLsizei width, GLsizei height);

例题:
熊猫奥鹏(www.188open.com):
1、        glMatrixMode(GL_MODELVIEW);函数的作用是            。
2、        假如有glFrustum(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0),则近裁剪面的左下角坐标为        ,右上角坐标为          ;
3、        假如有glFrustum(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0),则远裁剪面的左下角的坐标为       ,右上角的坐标为          。
4、        假如有glOrtho(-1.5, 1.5, -1.5, 1.5, -10.0, 10.0),则近裁剪面的左下角坐标为          ,右上角坐标为            ;远裁剪面的左下角的坐标为           ,右上角的坐标为            。
5、        写出完成沿X轴正方向平移5个单位的函数语句                   
6、        已知glViewport(0,0,width,height);界说了视口巨细,设近裁剪面为0.1,远裁剪面为1000,调查视角为45度,该怎么设置透视投影函数参数:                    
7、        gluLookAt函数的参数含义是                        

★查核常识点: 矩阵仓库
拜见讲稿章节:4
矩阵仓库操作次序与压入矩阵的次序相反。
glPushMatrix()表明将一切矩阵依次压入仓库,glPopMatrix()表明弹出仓库顶部矩阵。
在改换前需求把当时矩阵设置为单位矩阵:glLoadIdentity()
例题:
熊猫奥鹏(www.188open.com):
1、        glPopMatrix()函数的作用是              。
2、矩阵仓库操作与压入矩阵的次序         。

★查核常识点: 光源
拜见讲稿章节:8
制作真实感图形能够经过增加光源和增加原料来完成。
OpenGL支撑在同一场景中设置有限多个光源,通常能够设置8个不同色彩的光源。
对光照作用的核算是由四个不同的光照分量叠加而成的:
(1)        环境光
环境光实际上模仿了环境中源自一切光源的散光,该光源所照射的物体在一切方向的表面都是均匀照亮的。
(2)        散射光
散射光具有方向性,来自于一个特定的方向,它根据入射光线的视点在表面上向不同方向均匀的反射开来。
(3)        镜面光
镜面光模仿光泽物体表面反射的光线。
(4)        发射光
发射光模仿那些源自某个物体的光。
例题:
熊猫奥鹏(www.188open.com):
1、        OpenGL对光照作用的核算是由四个不同的光照分量叠加而成的,即:      、       、        、         。

★查核常识点: 光源RGB值与原料RGB值的联系
拜见讲稿章节:8
光源色彩分解为R、G、B三种成分,相当于R、G、B每种色彩的彻底强度百分比。原料色彩是对光的R、G、B三原色的反射率来近似界说资料的色彩。
假如一束OpenGL光线的成分是(LR,LG,LB),一种原料的成分(MR,MG,MB),那么进入眼睛的色彩值便是(LR*MR, LG*MG, LB*MB)。
假如两束光进入人眼,它的成分分别是(R1,G1,B1)和(R2,G2,B2),那么叠加在一起的光色彩便是(R1+R2,G1+G2,B1+B2),当值超越1时,它会被主动截取为1.
例题:
问答题:
1、原料RGB值和光源RGB值都用相同的办法表明,他们含义一样吗?

★查核常识点: 增加光照的进程
拜见讲稿章节:8
(1)        为场景物体的极点供应法线向量,这些法线确定了物体各个极点相对于光源的方位;函数为glNormal*();
(2)        启用光照核算,然后创立、挑选一个或多个光源,并在场景中为光源定位;
创立光源glLight*()
发动光照glEnable(GL_LIGHTING)
激活某个光源glEnable(GL_LIGHT0)
(3)        创立并挑选光照模型,它界说了大局环境光的等级和调查点的有效方位等;
glLightfv(GL_LIGHT0,GL_POSITION,light_position),留意light_position最终的参数值,若为0则代表光源无限远,即平行光源,不然代表方位性光源。
glLightModel*()函数来拟定光照模型的一切特点。
(4)        为场景中的物体界说原料特点。
界说原料:glMaterial*()
例题:
问答题:
1、        描绘一下向OpenGL场景中增加光照的四个进程。
程序设计题:
1、写出设置原料的漫反射光成分的函数。

★查核常识点: 方针&源
拜见讲稿章节:11
方针色彩:已经存在于色彩缓冲区中的色彩值,即已制作的色彩。
源色彩:来自于烘托指令的色彩,即新制作的色彩。
例题:
判断题:
1、方针色彩便是来即将制作的色彩。()

★查核常识点: 设置混合因子
拜见讲稿章节:11
glBlendFunc(源因子,方针因子);
把握常见的混合因子设置办法,示例参看PPT。
假如想要将一幅图画的黑色布景彻底镂空,混合因子应当设置为glBlendFunc(GL_DST_COLOR, GL_ZERO);

例题:
熊猫奥鹏(www.188open.com):
1、        假定先制作的三角形色彩为(0.0,1.0,0.0,0.5),后制作的三角形色彩为(1.0,0.0,0.0,0.75),假如要将这两个图形构成叠加作用,那么该怎么设置混合因子函数:______________

★查核常识点: 三维混合
拜见讲稿章节:11
    在一个三维场景中,怎么制作半通明物体是一个难点。根本的思维是先制作一切不通明的问题,然后将深度缓冲区设为“只读”状况,根据混合的原理(留意方针色彩与源色彩的次序)制作一切半通明物体,最终将深度缓冲区还原为“可读写”状况。
例题:
问答题:
1、        描绘在三维混合场景中,制作通明和半通明物体的次序?
 

需要答案联系我们