计算机游戏期末

上传人:jiups****uk12 文档编号:37681295 上传时间:2018-04-20 格式:DOC 页数:18 大小:360.50KB
返回 下载 相关 举报
计算机游戏期末_第1页
第1页 / 共18页
计算机游戏期末_第2页
第2页 / 共18页
计算机游戏期末_第3页
第3页 / 共18页
计算机游戏期末_第4页
第4页 / 共18页
计算机游戏期末_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《计算机游戏期末》由会员分享,可在线阅读,更多相关《计算机游戏期末(18页珍藏版)》请在金锄头文库上搜索。

1、一、简答题1、简述图形界面的 Windows 框架 Windows 框架是我们在 Windows 系统下运行的程序必须的架构,由三个函数构成: WinMain()程序入口,功能为定义一个 Windows 窗口的样式、大小等,并建立这个窗口;MsgProc()窗口调用函数,在整个运行周期中随时对回调的函数所定义的外部事件(鼠标 移动、点击窗口变化、键盘和其他函数发出的消息)做出反应; GameLoop()消息循环,利用 Windows 的消息机制做成的主循环函数,它被程序反复执 行,作用是侦听消息,有消息是返回 Windows 的消息链,没有消息时就执行 OpenGL 的图 形处理 Render

2、() 。2、简述 OpenGL 的程序框架 OpenGL 的基本框架由四个函数组成: SetupPixelFormat(HDC hDC)检测安装 OpenGL init(int Width,int Height)OpenGL 视口进行变换 CleanUp()清楚 OpenGL 的连接 Render()OpenGL 图形处理3、简述 OpenGL 的构图形式 OpenGL 的构图形式为,在函数对 glBegin(TYPE),glEnd()之间给出图形的顶点坐标集。 连接定点的方式由 glBegin 中的类型决定。基本形式如下: glBegin(TYPE);/连接各顶点的方式 /图形的定点坐标集;

3、 glEnd()4、至少列举 8 种 OpenGL 构图类型 GL_POINTS 单个顶点集 GL_LINES 多组双顶点线段 GL_LINE_STRIP 不闭合折线 GL_LINE_LOOP 闭合折线 GL_POLYGON 单个简单填充凸多边形 GL_TRAINGLES 多组独立填充三角形 GL_QUADS 多组独立填充四边形 GL_TRAINGLE_STRIP 线性连续填充三角形串 GL_TRANGLE_FAN 扇形连续填充三角形串 GL_QUAD_STRIP 连续填充四边形串5、简述 OpenGL 中 glPushMatrix()和 glPopMatrix()函数的应用 glPushMa

4、trix()函数:使用此函数就是要让 OpenGL 记住空间中当前的这个位置,以便经过 一些变换后还能快速方便地回到此处位置。 glPopMatrix()函数:此函数通知 OpenGL 在访问过空间的其他位置之后,返回到原先记住的 位置。6、简述 OpenGL 中坐标变换的三个函数应用 平移:glTranslatef(float x,float y,float z);将该函数以下的图形在三维坐标中移动(x,y,z) 旋转:glRotatef(float angle,float a,float y,float z);将该函数以下的图形在指定轴上旋转 angle 度 缩放:glScalef(flo

5、at x,float y,float z);x,y,z 是沿三个轴向缩放的比例因子7、OpenGL 中,顶点在最终被绘制到屏幕上之前要经过哪 3 种类型的变换 视图变换:设定视点的位置 模型变换:在场景中移动物体 投影变换:定义视体和裁剪平面8、OpenGL 试图通过哪 4 种光的组合来模拟真实世界的光照 环境光、散射光、镜面反射光、发射光9、简述 OpenGL 摄像漫游的实现原理 观察点在场景中位置改变的结果10、简述 OpenGL 中纹理映射的技术原理 纹理映射是一项技术,其能够将 3D 图形从一堆有颜色的三角形变成可以像照片一样具有 真实感的场景。究其本质,纹理就是些图案。当纹理映射到一

6、个多边形上时,纹理就随着 多边形的变换而进行相应的变换。11、解释纹理坐标的应用 如果对一个 2D 纹理加上一个坐标系,那么就可以确定其上的每一个点并对其进行操作, 每一个点叫一个纹理坐标,通常以点(s,t)的形式表示。当纹理映射应用于表面时,使用 参数坐标(u,v)来定义其纹理在表面上的方向,u 和 v 的取值在(0,1)的区间内,对于所 进行纹理映射的表面,其上的坐标 u 和 v 的最大值和最小值决定了纹理映射的范围。12、简述 OpenGL 中实现天空体常用的两种方法 天空盒:用一个矩形方盒作为天空远景贴图的载体半球形天空模型13、简述 MD2 关键帧动画模型的原理 MD2 是一种关键帧

7、关键帧动画模型。所谓关键帧动画模型,就是构成模型的各个结构组件, 按一定的时间序列进行位置移动、旋转,形成模型的整个动作变化序列。14、简述 MDL 骨骼动画模型的原理 骨骼动画模型是形象模型为蒙皮,动作架构为骨骼而有机组成的 3D 动画。其优势在于用 线段代表动物的骨骼关节,动物的一切复杂动作是用数据量极小的线段在空间位置的变换 来表示。真正的优势还在于骨骼和形象模型是可以分离和重新组合的。15、简述粒子系统的原理 基本原理是用大量的粒子对仿真对象的流体力学原理进行模拟。 粒子系统是多个独立元素或粒子的一个集合,每个粒子具有独立的属性,比如速度、颜色 和生命周期等。每个粒子主要以其自主的方式

8、进行运动,在一个给定的粒子系统中的粒子 通常共享一组公用的属性。16、简述基于位置框的碰撞检测的基本原理 任何一个物体在场景中都有一个确定的位置、大小,可用一个位置框来表示。当一个运行 物体的位置框与另一个物体的位置框相遇或相交时,我们就说这两个物体发生了碰撞。17、OpenGL 颜色立方体模型 OpenGL 通过三个独立的分量,红色分量、绿色分量和蓝色分量的强度来定义颜色。这些强 度的取值范围从 0.0(无光强)1.0(最大光强) 。18、简述 OpenGL 状态机的概念 OpenGL 状态机由几百个设置项组成,在要做的每一件与 OpenGL 有关的事件中都会发生作 用,其影响着绘制的方方面

9、面,有众多的状态函数用以控制状态机:如 glGet()函数用于查 询状态机当前的设置。19、OpenGL 中如何实现点画线段 可以指定一个点画模式来绘制线段。点画模式定义了一个掩膜,用以确定线段的哪些部分该绘制而哪些部分不绘制。使用点画模式之前,需要调用带有 GL_LINE_STRIPPLE 参数的 glEnable()函数来启用此项性能。然后,调用 glLineStipple()函数设置点画模式,此函数定义 如下: void glLineStipple(Glint factor,GLushort pattern);factor 参数的默认值为 1,其取值范围是 1256.他决定了点画模式中每

10、一位在开始绘制下一 位之前应该被重复绘制的次数。 pattern 参数指定了一个 16bit 的模式。其中对于被设置为 1 的位,其相应的像素被绘制; 而那些为 0 的,将不被绘制。应该注意的是这些位是按照逆序来应用的,所以绘制线段时 低位先被应用,然后依次应用较高的位。20、简述 OpenGL 的两种投影变换 平行投影:投影时所有物体无论它们相对于投影平面的距离远近,其在投影平面上的投影 的大小比例保持不变。投影平面可以被认为是对着 3D 世界的摄像镜头,所有可见的 3D 点 都要投射到这个 2D 平面上。可以分两步来完成:第一步先要将投影平面变换到 3D 空间的 xy 平面上,第二步除去所

11、有可见点的 z 项坐标信息。透视投影:基于物体相对于投影平面的距离来确定其投影大小的,其投影时,3D 空间中物 体的所有投射光线会聚于观察者的眼睛这一点。其主要的思路就是确定反射光线与投影平 面交点的位置,可以借助于一个透视变换矩阵来完成。21、OpenGL 三维场景中的二维平面树怎么实现 在一个矩形平面上贴一个树木的图片,让树的背景呈透明状态,并让这些平面树在我们旋 转场景时也跟着一起旋转,使我们看到的都是看到的平面树的正面。二、程序设计二、程序设计1、基本图元的绘制 a.画点 void Point() glBegin(GL_POINTS); glVertex3f(0.0f,0.0f,0.0

12、f); glEnd(); b.画线 void Line() glBegin(GL_LINES); glVertex3f(-1.0f,-1.0f,0.0f); glVertex3f(1.0f,-1.0f,0.0f); glEnd(); c.画三角形 void Triangle() glBegin(GL_TRIANGLES); glVertex3f(0.0,0 0,0.0); glVertex3f(1.0,0.0,0.0); glVertex3f(0.0, 1.0,0.0); glEnd(); d.画正方形 void Square glBegin(GL_POLYGON); glVertex3f(0

13、.0f,0.0f,0.0f); glVertex3f(1.0f,0.0f,0.0f); glVertex3f(1.0f,1.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); glEnd(); e.画立方体 void Esquare() glBegin(GL_QUAD_STRIP);/填充凸多边形 glVertex3f(0.0f,0.0f,0.0f);/a0 glVertex3f(0.0f,1.0f,0.0f);/a1 glVertex3f(1.0f,0.0f,0.0f);/b0 glVertex3f(1.0f,1.0f,0.0f);/b1 glVertex3f(1.0

14、f,0.0f,-1.0f);/c0 glVertex3f(1.0f,1.0f,-1.0f);/c1 glVertex3f(0.0f,0.0f,-1.0f);/d0 glVertex3f(0.0f,1.0f,-1.0f);/d1 glVertex3f(0.0f,0.0f,0.0f);/a0 glVertex3f(0.0f,1.0f,0.0f);/a1 glEnd();/上下两个面 glBegin(GL_POLYOON); glVertex3f(0.0f,0.0f,0.0f);/a0 glVertex3f(1.0f,0.0f,0.0f);/b0 glVertex3f(1.0f,0.0f,-1.0f

15、);/c0 glVertex3f(0.0f,0.0f,-1.0f);/d0 glVertex3f(0.0f,1.0f,0.0f);/a1 glVertex3f(1.0f,1.0f,0.0f);/b1 glVertex3f(1.0f,1.0f,-1.0f);/c1 glVertex3f(0.0f,1.0f,-1.0f);/d1glEnd(); f.画圆 void Park() glBegin(GL_TRIANGLE_PAN); glVertex3f(0.0f,0.0f,0.0f); for(int i=0;i /主要的 Windows 头文件 /Windows Produce 事件处理器 LRE

16、SULT CALLBACK WndProc(HWND hwnd, UINT message,WPARAN wParam,LPARAM lParam) PAINTSTRUCT paintStruct; /设备环境 HDC hDC;char string=”Hello,world!”; /要被显示的文本 switch(message) case WM_CREATE: /创建窗口 return 0; /返回消息循环 break;case WM_CLOSE: /窗口关闭 PostQuitMessage(0); /发送退出消息 return 0; break;case WM_PAINT: /在窗口中进行绘制,刷新 hDC=BeginPaint(hwmd,/激活窗口 /设置文本颜色为蓝色 SetTextColor(hDC,COLORREF(0x00FF0000);/在窗口中央显示文本 TextOu

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号