1、厦门大学软件学院本科毕业论文 第 1 页 共 38 页 3D 游戏设计 摘要 游戏事业蓬勃发展 ,越来越多的人参与其中。而 越来越多的大学提供了游戏开发程 序 ,也出现了很多介绍开发游戏的书籍。但我们缺少的是一个设计完全的特色游戏所需要的所有步骤的 工具。本文就是这样的一种资源。 对一个游戏开发者来说, 游戏引擎无疑是重中之重。本文介绍了游戏引擎 -torque 将很好的帮我们学习开发 3D游戏。 我们用 UltraEdit 来编辑代码,编辑 GUI 来设计游戏画面,用3Dmax 来建立游戏模型,用 SoundEdit 来编辑音效。游戏环境用的是纹理,然后游戏身临其境的是音效 ,而脚本则把这些
2、串成 了一个整体。 本文主要介绍 torque 等软件的使用,并使之整合成一个游戏。 关键 词 torque GUI 纹理 3D 模型 厦门大学软件学院本科毕业论文 第 2 页 共 38 页 3D game design Abstract The game project is develop so good that more and more people join it. More and more universities provide the codes of the game, and many books which introduce how to emploder a ga
3、me appear. But we need a tool which supports a full process to a game designed fully. And the words would be the resource. To a game developer, a good game engine is very important. The torque engine which is introduce d in the words would help us exploder the project greadtly.Torque engine provide
4、the codes which support many functions just like network connections and GUI.We use UltraEdit to compile code; compile GUI to design the game menu; use 3dmax to build the game model; use SoundEdit to compile music.we need texture to prettify game environment, and use music to be personally on the sc
5、ene, then use script to them. The words introduce mainly how to use torque and other software,then set up a game. Keywords torque GUI texture 3d model 厦门大学软件学院本科毕业论文 第 3 页 共 38 页 目录 第一章 绪论 . 5 第二章 游戏引擎概论 . 6 2.1 Torque 功能介绍 . 6 2.2 Torque 引擎包配套的软件 . 11 2.3 Torque 引擎使用简介 . 11 2.4、为什么使用 torque 引擎及安装过程
6、 . 17 第三章 用 Torque 引擎开发我们的 3D 游戏 . 19 3.1 辅助软件 -UltraEdit . 19 3.1.1 创建项目和文件 . 20 3.1.2 查找替换 . 23 3.1.3 grep . 24 3.1.4 书签 . 25 3.1.5 宏 . 26 3.1.6 总结 . 27 3.2 3D 游戏 -tank 制作 . 28 3.2.1 整个游戏 的分析和分工安排 . 28 3.2.1.1 游戏分工 . 28 3.2.1.2 人员安排 . 28 3.2.2 游戏结构分析(文件夹) . 28 3.2.3 游戏模块分析 . 31 3.2.3.1 根主模块 . 31 3
7、.2.3.2 控制模块 . 33 3.2.3.3 客户机控制模块 . 33 3.2.3.4 服务器控制模块 . 34 3.2.3.5 数据资源模块 . 34 第四章 结论 . 36 致 谢 . 37 参考文献 . 38 厦门大学软件学院本科毕业论文 第 4 页 共 38 页 Contents Chapter 1 Introduction. . .6 Chapter 2 Conspectus of the torque engine . 7 2.1 the introduction of Torque function. 7 2.2 the assistant software of Torqu
8、e. 12 2.3、 hao to use torque . 12 2.4、 why to use torque engine end hao to build. 18 Chapter 3 Use torque to empolder our game. 20 3.1 the assistant software -UltraEdit. 20 3.1.1 create item and file. 20 3.1.2lookip and replace. 24 3.1.3 grep. 25 3.1.4 bookmark. 25 3.1.5 macro. 26 3.1.6 summarize. 2
9、8 3.2 3D game-tank. 28 3.2.1the plan of the game。 . 28 3.2.1.1、 compartmentalizion of the game. 28 3.2.1.2、 the plan of mans. 28 3.2.2 the analyse of configuration. 29 3.2.3 the analyse of module . 32 3.2.3.1 root module. 32 3.2.3.2 control module. 33 3.2.3.3 the control module of client. 34 3.2.3.4
10、 the control module of server. 34 3.2.3.5 data resources. 35 Chapter 4 Conclusion. 36 Thanks . 37 Referrence literature. 38 厦门大学软件学院本科毕业论文 第 5 页 共 38 页 第一章 绪论 计算机游戏是一个每年 90 亿美元的行业。该行业的玩家人数不断增长,在这些增长的玩家人数中,其中一些人并不只是希望玩游戏,而是相信自己可以比游戏伙伴玩得更好。您的问题可能是缺少需要将您的梦想变为现实的相关训练、经验和工具的正确结合。本书就是帮助您实现这一点。 每年,越来越多的大学提
11、供游戏开发程序,并且每隔几个月,一个新的在线独立游戏开发人员站点就会出现在 Web 上。对于已经付过钱的那些人,他们并不缺少训练。对于希望创建自己的引擎和游戏其他指定部分的那些人,他们也不会缺少相关的书籍。 缺少的关键 元素是一种资源:带着一个富有灵感和有抱负的游戏开发人员,和他一起查看设计完整的特色游戏所需的所有步骤和工具。本书就是这种资源。除了游戏音乐合成外 (这本身就可能是一个完整的书籍系列 ),您还将学习如何创建游戏的每个部分,其方法是使用良好定义的程序工具箱、相关的知识、技术和思想。 所有的开发工具,包括引擎, 都在 http:/ 上。 本文将介绍如何使用 torque 游戏引擎及游
12、戏程序编辑,并描述下游戏架构等,使你对整个 3d 游戏有初步的认识。 厦门大学软件学院本科毕业论文 第 6 页 共 38 页 第 二 章 游戏引擎概 论 2.1 Torque功能介绍 我们知道,做一个大型一点的游戏实际上和做个小操作系统差不多,每做一款游戏就从底层开始重新编写代码是非常不切实际的。因此,开发者在做第一个游戏时会把很多已经做好的东西封装成类,然后留出接口,以供下一个游戏调用。这个类库其实就可以叫做游戏引擎。严格的说它是用于控制游戏功能的主程序。控制着游戏的运行,如人工智能、游戏世界的物理定律,还实现人机交互,如接受玩家控制信息的输入,选择合适的声音以合适的音量播放等。也许这样说还
13、过于简单和抽象, 本文中我们介绍了 torque 游戏引擎 , 那么, 这个 游戏引擎究竟能做什么呢? ( 1) 基本的控制流 Torque Game Engine 初始化库和游戏中的函数,然后在游戏的主循环体中循环直到游戏结束。主循环通常会调用平台库中的函数来产生平台事件,这些事件将驱动游戏的发展。 Torque 负责处理如下几种基本的事件处理: a、显示鼠标在 GUI 上的移动事件 b、处理其他与输入有关的事件 c、依据设定的时间模拟比例计算经过的时间 d、管理服务器对象的处理时间 e、检测服务器网络数据包的传输 f、增长模拟事件的时间 g、处理客户端对象的时间 h、检测客户机网 络数据包
14、的传 i、渲染当前帧 j、检测网络连接是否超时 ( 2) 平台层 平台层向该引擎提供了一个跨平台体系结构接口。平台层负责处理文件、网络操作、图片初始化、用户输入以及各种事件。 ( 3) 控制台 控制台库为以 Torque Engine 为基础的游戏提供一些基本功能。控制台上同时具有编译厦门大学软件学院本科毕业论文 第 7 页 共 38 页 器和解释器。所有的 GUI、游戏对象、游戏中的逻辑以及接口都是通过控制台进行处理的。控制台语言被称作 Torque Script,与 C+语言类似,但具有一些利于游戏开发的特性。可以使用命令从控制台窗口载入控制台脚本,也可以从文件中自 动载入。 ( 4) 输
15、入模型 输入事件经由平台层解释然后递交到游戏。默认情况下,游戏按照一张全局动作映射表检查输入事件,这张表取代所有其他的动作处理程序。如果在表中找不到指定事件的动作,则事件将被传递给 GUI 系统。如果 GUI 没有处理输入事件,它将被传递到当前活动 (但非全局 )的动作映射堆栈中。 各个平台的相关代码会把 Win32, Xwindows 或 Mac 系统上发生的事件翻译成统一的Torque 输入事件。这些事件被发送到主应用程序事件队列中。 动作映射表把平台层的输入事件翻译成控制台命令任何平台输入事件都能够被绑定到 一种通用的处理方法上 -所以理论上,游戏并不需要知道事件是来自键盘、鼠标、操纵杆
16、还是其他输入设备。这使得游戏玩家可以按照自己的喜好设置操作方式。 ( 5) 仿真 来自平台库的事件流驱动着游戏的发展,这些事件包括: InputEvent, MouseMoveEvent,PacketReceive-Event, TimeEvent, QuiteEvent, ConsoleEvent, ConnectedReceive-Event,ConnectedAcceptEvent 和 ConnectedNotifyEvent。通过记录平台库 的事件流,游戏的仿真会话 (simulation session)部分就能够根据调试的需要重复游戏的某个片断。 对象的仿真基本上是由游戏的引擎部分
17、完成的。有时间限制的对象可以根据它是服务器对象还是客户端对象添加到以下两个处理列表中的某一个上:全局服务器队列或全局客户机队列。 服务器端的对象只在某些特定的时间进行仿真,但对于客户端对象,为了在帧速率很高的时候能够产生平滑的视觉效果,必须在每一个时间事件后重新仿真。 有一个专用的 simulator 类,它管理着所有需要仿真的对象和事件。这些对象分为不同层级的 simulator 类,可以通过名称或对象 ID引用它们。 ( 6) 资源管理器 Torque Engine 会使用到为数众多的资源。地形文件、位图、形状、材质清单、字体以及内景都是游戏资源的例子。 Torque 有一个资源管理器,这
18、个管理器用于管理各种游戏资源并提供一个加载和保存资源的通用接口。 Torque 的资源管理器支持每次只加载一种资源的一个实例。 厦门大学软件学院本科毕业论文 第 8 页 共 38 页 ( 7) 图形 Torque 本身没有图形生成功能;取而代之的是,它使用 OpenGL 的图形 API。 Torque 有一个实用工具库,这个库用于扩展 OpenGL 以支持更高层次的图元和资源。 Torque 有一个实用函数集,该函数集能够更好地支持复杂的图元和资源,而且对较容易管理的纹理和 2D 图形添加了一些简单的功能。 Torque 有一个纹理管理器,该管理器负责游戏中纹理的加载和卸载。在一个给定的时间内
19、只能加载某个纹理的一个实例;在加载完成后纹理由 OpenGL 处理。当游戏切换图形模式或视频设备时,纹理管理器会透明地重新加载或是卸载游戏的纹理。 Torque 支持多种位图文件类型: PNG、 JPEG、 GIF、 BMP,以及用户自定义的 BM8 格式,这是一种用于最小化纹理内存开销的颜色为 8位的纹理格式。 GUI库管理 Torque 游戏的用户界面。它是专门为游戏界面开发而设计的。 Canvas 对象是当前 GUI 层级的根对象。它负责发送鼠标和键盘事件,管理更新区域和光标,并在绘制下一帧的时候调用恰当的渲染方法。 Canvas 会跟踪内容控制,这种控制从下到上分层地控制内容的渲染,主
20、要用于控制在屏幕上显示任意数量的浮动窗口或对话框。 Profile 类负责维护一组控件之间的实例数据。字体、颜色、位图和声音数据等信息都保存在 Profile 类的实例中,所以并不需要对每一个控件都复制一个 Profile 类的实例。 Control 类是系统 中所有 GUI 控件的根类。一个控件可以容纳任意数量的子控件。每个控件都以父控件的边框为坐标系在父控件内部占用一块矩形区域。 Control 类负责处理控件的输入、渲染,同时负责接受鼠标焦点和按坐标自动调节控件的大小。 ( 8) 3D 渲染 Torque 库有一个模块化的、可扩展的 3D 渲染系统。游戏子类首先定义成像方位和视觉范围,然
21、后调用 OpenGL 的画图命令画出 3D 场景。类负责确定视口,以及模型的观察角度和投影矩阵。函数将返回当前受控对象 (玩家当前正在控制的模拟对象 )的成像角度,然后引擎将调用客户端场景图形对象渲染游戏环 境。 在客户端,场景图形库负责监控整个游戏场景,并根据当前的成像角度决定应该渲染哪些对象;而在服务器端,它负责根据玩家在游戏中的视觉角度决定应该把哪些物体发送到客户端。整个场景被分为多个区域,每个区域由多个实心部分和入口组成。场景以外是一个单独的区域;内部对象可以有多个内部区域。引擎负责找出一个给定 3D点在哪个区域以及拥有该区域的对象。然后引擎就能够决定哪个或哪些区域包含一个对象实例。在
22、渲染的时候,整个场景将从包含摄像机的区域开始,按照在它之前的区域中设置的视觉入口剪辑每个区域中厦门大学软件学院本科毕业论文 第 9 页 共 38 页 的对象。引擎还负责确定网络对 象的处理范围,决定一个给定对象是否需要由客户端处理。 场景中的每个能够渲染的对象都是从一个基类派生出来的。在刷新场景的时候,所有可见的对象都需要准备一幅或多幅用于渲染的图像,这些图像随后将被插入到当前场景中。图像先按透明性排列,然后渲染。这种方法允许在渲染一个带有多个半透明窗口的楼房时先渲染楼房,然后渲染其他对象,接着再渲染楼房的窗口。对象可以插入多张用于渲染的图像。 ( 9) 地形 地形库负责处理渲染外部场景模型的
23、对象。它包含了 sky 对象,这个对象渲染外围的天空和有层次感的云层,并在渲染整个场景的时候通过设置 明显的和模糊的距离使环境变得错落有致。 sky 对象还将产生模糊的垂直层次并将其发送给 SceneGraph 对象,以便渲染。TerrainBlock 类提供了无限多个大小为 256 256 的区域,这些区域在一个水平面上展开。每个区域上的数据都由资源管理器负责保存和加载,这样单个地形数据文件就可以在服务器和客户机之间共享了。 对地形的纹理处理是通过代码把基本的材质纹理和新的材质纹理混和到一起,然后按照矩形区域的距离远近投影到连续的矩形上。 Blender 类负责混和不同的地形纹理并转换成特定
24、的版本,以便在 x86 体系结构的机 器上运行时能够加快速度。 游戏中的水按照距离的远近自动渲染,近处的水比远处的水波纹更多,颜色更深。水的覆盖范围可以按如下方法圈定,在画面上设置一个点,然后以这个点为中心形成一个湖泊,并且不会有水从边角泄漏出去。 ( 10) 内景 内景库负责渲染图像,管理冲突,并为内部对象,比如各种建筑物,提供磁盘文件服务。内部资源类管理与单个内部对象定义有关的数据,任何时候系统中都可能存在多个资源类实例。内景库管理用于渲染场景图像的区域,而且还可能拥有渲染镜像视图的子类。光源管理器类为当前已经加载了的对象产生光照贴图。只要有可 能,实例就会共享光照贴图。内部资源通过一个内
25、部导入实用程序构造和加亮。源文件是 Quake 风格的 .map 文件,该文件与凸面物理结构的实心“画笔”列表并无差别。这种画笔用来定义内部实心区域。某些特殊的画笔定义了区域的边界和类似于光源这样的对象。 ( 11) 形状和动画 这个库负责管理各种形状模型的显示和动画。库的形状资源类可以在多个形状实例之间共享。形状类管理形状的所有静态数据:网格数据,动画关键帧,素材列表,纹理信息,触发器和详细的层级。实例类管理形状实例的动画、渲染以及细节的选择。实例类使用线程类厦门大学软件学院本科毕业论文 第 10 页 共 38 页 管理多个同时运 行的对象的动画,这些类和对象一一对应。每个线程都能够各自及时
26、地运行,或者在其他线程运行的时候按照另一个不同的时间比例运行。线程还可以在不同的动画顺序之间切换。 动画的顺序可由节点 /骨骼 (node/bone)动画 (例如,爆炸的各个环节 )、素材动画 (爆炸中的纹理动画 )和网格动画 (如一个形状变化的水滴;注意大多数网格动画都可以通过节点级的动画和旋转动画来完成 )组成。动画还包括是否渲染图形以便图形的网格只有在动画开始之后才能 看到。 ( 12) 网络连接 Torque 设计的基础是要提供强大的客户机 /服务器网 络模拟支持。 Torque 网络设计的目标是能够在 Internet 上获得良好的网络性能。 Torque 处理了 3 个基本的实时网
27、络编程问题:受限带宽,数据包丢失和延迟。 Torque 游戏的实例可以在专用的服务器、客户机上安装,或者同时在服务器和客户机上安装。如果游戏有客户端和服务器端,则运行游戏时客户端将连接到服务器端,不过在同一个游戏实例中的网络代码之间有捷径相连,而且没有数据会超出网络的范围。 带宽是一个棘手的问题,因为 Torque 支持广阔、开放的地形环境,而且要处理为数众多的客户端对象 每台服务器最多可以连 接 128 台客户机,这意味着很可能会有多个对象同时需要移动和更新。 Torque 使用很多策略来最大化可用带宽。 a、它以比较高的频率向客户机发送对于客户机而言最为重要的更新数据,而对于其他不是最重要
28、的更新数据,发送的频率要低一些。 b、对一段数据,只发送所需的最少比特位。 c、只发送已发生变化的对象的状态。 d、缓存普通的字符串和数据,以便一次传送所有数据。 数据包丢失也会产生问题,因为在丢失的数据包中包含的信息必须以某种方式重传,然而在大多数情况下,如果直接重传丢失的数据包,那么这些数据包中的信息在到达客户端 时已经变得很陈旧了。 延迟在模拟时也是一个问题,因为网络数据传输的延迟会使得客户端的视觉效果与服务器端无法同步。快速移动风格的 FPS 游戏需要对操作控制在瞬间之内作出响应,以便让玩家感受到游戏的风驰电掣,这也是 Torque 设计的初衷。另外,延迟很大的玩家无法击中高速运动的物体。为了解决这些问题, Torque 采用了以下策略: