1、- 1 - 本科毕业论文 (科研训练、毕业设计 ) 题 目: 3D 游戏设计 姓 名: 学 院:软件学院 系: 专 业:软件工程 年 级: 学 号: 指导教师(校内): 职称: 年 月 - 2 - 摘 要 电子娱乐业已经成为当今世界最大 ,发展最快的工业 . 同时 , 游戏业 是其中的璀璨新星 . 然而 , 在游戏业被成功的光环围绕的时候 , 它也面临着重重挑战 . 软件工业的发展 , 在这个全球范围内对软件需求的指数增长中 , 对游戏业的发展提出了全新的挑战 . 例如 , 游戏引擎 , 游戏开发的前沿工具等把软件工程和面向对象的思想带入了游戏开发自动化中 . 这些开发工具使我们能更好的专注于
2、游戏的整合和开发流程 . 这篇论文便将集中探讨游戏引擎并且对基于引擎 ( Torque )开发 3D游戏的整体流程给出完整的开发实例 . 无论是游戏开发者 , 学术研究人员还是其他对游戏工业狂热的爱好者 , 都会受益于此篇论文所提供的资源 , 经验 . 在小组开发中我主要负责 用 3DMAX 完成物品和人物造型部分的工作 以及模型文件的格式转换和导入 . 游戏建模的成败直接决定了游戏的质量 , 因此通过大 量的学习和资料查阅 , 在短期内我熟悉了 3DMAX的建模原理 , 为游戏的坦克 ,弹药等完成了建模工作 . 在开发过程中其他的一些关键机制包括游戏设计 , 3D 建模和声音合成 . 游戏引
3、擎同样无法离开大量插件的支持和 3ds max 等绘图建模软件的辅助 . 在团队的合作中 , 每个人都有不同的任务分工并在各自的领域有所深入 . 关键字 : 计算机游戏 , 游戏引擎 , 3D 建模 , Torque - 3 - Abstract The electronic entertainment industry has become one of the largest and fastest growing industries throughout the world. What is more, games are as competitive as any entertain
4、ment industry. The digital game industry, however, is as surrounded by success as it is continuously faced by challenges. Software development industrialization, an upcoming tendency entailed by the exponential growth of the total global demand for software, will present many new challenges to game
5、development. For example, the game engines, state-of-the-art tools in game development, brought the benefits of Software Engineering and object-orientation towards game development automation. The abstraction level provided by them exposes us to a better integration with development processes. This
6、paper will mainly discuss about game engines and provide a demonstration of the whole process of developing a 3D game based on game engines such as Torque. This paper would be a valuable resource for game developers, academic researchers and other people who are fascinated by the game development in
7、dustry. In the teamwork, I am responsible for the modeling of tank and other objects using 3DMAX and also the format transformation. Whether you are successful of the modeling determines the quality of the video game. Through intensive study and research, I am be able to get familiar with the basic
8、modeling principle of 3DMAX and completed the task of modeling tank and other relative stuffs. Other key elements included in this development process are game design, 3D modeling and sound mixing. The functioning of game engine also requires the assistance of varieties of plug-ins and modeling soft
9、ware such as 3ds max. In this teamwork, individuals are assigned different tasks and they are supposed to specialize in their given areas. Key words: computer games, game engine, 3D modeling, Torque - 4 - 目录 第一章 游戏引擎概述 . 6 1.1 TORQUE功能介绍 . 6 1.1.1 基本的控制流 . 7 1.1.2 平台层 . 7 1.1.3 控制台 . 7 1.1.4 输入模型 .
10、8 1.1.5 仿真 . 8 1.1.6 资源管理器 . 9 1.1.7 图形 . 9 1.1.8 3D 渲染 . 10 1.1.9 地形 . 10 1.1.10 内景 . 11 1.1.11 形状和动画 . 11 1.2 TORQUE引擎包配套的软件 . 12 1.3 TORQUE引擎使用简介 . 13 1.4、为什么使用 TORQUE引擎及安装过程 . 17 第二章 用 TORQUE 引擎开发我们的 3D 游戏 . 19 2.1 游戏制作的模块分类 . 20 2.2 人员分工安排 . 20 2.3 游戏文件树形图 . 21 2.4 TORQUE引擎运行机制 . 21 第三章 3D 建模 .
11、 22 3.1 3DS MAX 简介 . 22 3.2 坦克建模 . 22 3.2.1 从基本立方体构造坦克模型 . 22 3.2.2 制作坦克履带 . 25 3.2.3 对模型的贴图和渲染 . 27 第四章 文件格式转换 . 31 从 3D STUDIO MAX 中导出 DTS . 31 4.1 什么是 DTS . 31 4.2 使用 MAX2DTS EXPORTER 导出器转换格式 . 32 第五章 TORQUE 引擎模型导入及相关脚本分析 . 33 5.1 向 TORQUE中导入各类模型 . 33 5.1.1 向 Torque 中导入静态模型 . 33 5.1.2 向 Torque 中导
12、入触发器模型 . 33 5.1.3 向 Torque 中导入基本碰撞体模型 . 35 5.2 坦克模型导入及相关代码分析 . 37 第六章 总结 . 39 - 5 - 致谢 . 40 参考文献 . 41 - 6 - 第一章 游戏引擎概述 1.1 Torque 功能介绍 游戏引擎被证明是将软件工程概念成功运用于游戏开发领域的产物 . 游戏引擎提供了更高级的抽象 , 知识封装和可重用的游戏开发基础模块 , 它让游戏开发业达到了一个空前的生产力阶段 . 一个引擎提供了可重用的应用编程接口 , 它们把常用的游戏开发模块整合 , 例如实体渲染 , 世界管理 , 游戏事件处理等 . 与此同时 , 引擎也给
13、开发者一个可编程的接口以控制游戏的行为 . 换句话说 , 开发者可以更专注于特定游戏的特征 , 例如编程逻辑 , 人工智能 , 艺术美工等等 . 我们知道,做一个大型一点的游戏实际上和做个小操作 系统差不多,每做一款游戏就从底层开始重新编写代码是非常不切实际的。因此,开发者在做第一个游戏时会把很多已经做好的东西封装成类,然后留出接口,以供下一个游戏调用。这个类库其实就可以叫做游戏引擎。严格的说它是用于控制游戏功能的主程序。控制着游戏的运行,如人工智能、游戏世界的物理定律,还实现人机交互,如接受玩家控制信息的输入,选择合适的声音以合适的音量播放等。也许这样说还过于简单和抽象, 本文中我们 将对
14、torque 游戏引擎 做一些介绍 , 那么, 这个 游戏引擎究竟能做什么呢? - 7 - 1.1.1 基本的控制流 Torque Game Engine 初始化库和游戏中的函数,然后在游戏的主循环体中循环直到游戏结束。主循环通常会调用平台库中的函数来产生平台事件,这些事件将驱动游戏的发展。 Torque 负责处理如下几种基本的事件处理: 1、显示鼠标在 GUI 上的移动事件 2、处理其他与输入有关的事件 3、依据设定的时间模拟比例计算经过的时间 4、管理服务器对象的处理时间 5、检测服务器网络数据包的传输 6、增长模拟事件的时间 7、处理客户端对象的时间 8、检测客户机网络数据包的传 9、渲
15、染当前帧 10、检测网络连接是否超时 1.1.2 平台层 平台层向该引擎提供了一个跨平台体系结构接口。平台层负责处理文件、网络操作、图片初始化、用户输入以及各种事件。 1.1.3 控制台 控制台库为以 Torque Engine 为基础的游戏提供一些基本功能。控制台上同时具有编译器和解释器。所有的 GUI、游戏对象、游戏中的逻辑以及接口都是通过控制台进行处理的。控制台语言被称作 Torque Script,与 C+语言类似,但具有一些利于游戏开发的特性。可以使用命令从控制台窗口载入控制台脚本,也- 8 - 可以从文件中自动载入。 1.1.4 输入模型 输入事件经由平 台层解释然后递交到游戏。默
16、认情况下,游戏按照一张全局动作映射表检查输入事件,这张表取代所有其他的动作处理程序。如果在表中找不到指定事件的动作,则事件将被传递给 GUI 系统。如果 GUI 没有处理输入事件,它将被传递到当前活动 (但非全局 )的动作映射堆栈中。各个平台的相关代码会把Win32, Windows 或 Mac 系统上发生的事件翻译成统一的 Torque 输入事件。这些事件被发送到主应用程序事件队列中。 动作映射表把平台层的输入事件翻译成控制台命令任何平台输入事件都能够被绑定到一种通用的处理方法上 -所以理论上,游戏并不 需要知道事件是来自键盘、鼠标、操纵杆还是其他输入设备。这使得游戏玩家可以按照自己的喜好设
17、置操作方式。 1.1.5 仿真 来自平台库的事件流驱动着游戏的发展,这些事件包括: InputEvent,MouseMoveEvent, PacketReceive-Event, TimeEvent, QuitEvent, ConsoleEvent,ConnectedReceive-Event, ConnectedAcceptEvent 和 ConnectedNotifyEvent。通过记录平台库的事件流,游戏的仿真会话 (simulation session)部分就能够根据调试的需要重复游戏的某个片断。 对象的仿真基本上是由游戏的引擎部分完成的。有时间限制的对象可以根据它是服务器对象还是客户
18、端对象添加到以下两个处理列表中的某一个上:全局服务器队列或全局客户机队列。 服务器端的对象只在某些特定的时间进行仿真,但对于客户端对象,为了在帧速率很高的时候能够产生平滑的视觉效果,必须在每一个时间事件后重新仿真。 有一个专用的 simulator 类,它管理着所有需要仿真的对象和事件。这些对- 9 - 象分为不同层级的 simulator 类,可以通过名称或对象 ID 引 用它们。 1.1.6 资源管理器 Torque Engine 会使用到为数众多的资源。地形文件、位图、形状、材质清单、字体以及内景都是游戏资源的例子。 Torque 有一个资源管理器,这个管理器用于管理各种游戏资源并提供一
19、个加载和保存资源的通用接口。 Torque 的资源管理器支持每次只加载一种资源的一个实例。 1.1.7 图形 Torque 本身没有图形生成功能;取而代之的是,它使用 OpenGL 的图形 API。Torque 有一个实用工具库,这个库用于扩展 OpenGL 以支持更高层次的图元和资源。 Torque 有一个实 用函数集,该函数集能够更好地支持复杂的图元和资源,而且对较容易管理的纹理和 2D 图形添加了一些简单的功能。 Torque 有一个纹理管理器,该管理器负责游戏中纹理的加载和卸载。在一个给定的时间内只能加载某个纹理的一个实例;在加载完成后纹理由 OpenGL 处理。当游戏切换图形模式或视
20、频设备时,纹理管理器会透明地重新加载或是卸载游戏的纹理。 Torque 支持多种位图文件类型: PNG、 JPEG、 GIF、 BMP,以及用户自定义的BM8 格式,这是一种用于最小化纹理内存开销的颜色为 8 位的纹理格式。 GUI 库管理 Torque 游 戏的用户界面。它是专门为游戏界面开发而设计的。 Canvas对象是当前 GUI 层级的根对象。它负责发送鼠标和键盘事件,管理更新区域和光标,并在绘制下一帧的时候调用恰当的渲染方法。 Canvas 会跟踪内容控制,这种控制从下到上分层地控制内容的渲染,主要用于控制在屏幕上显示任意数量的浮动窗口或对话框。 Profile 类负责维护一组控件之
21、间的实例数据。字体、颜色、位图和声音数据等信息都保存在 Profile 类的实例中,所以并不需要对每一个控件都复制一个- 10 - Profile 类的实例。 Control 类是系统中所有 GUI 控件的根类 。一个控件可以容纳任意数量的子控件。每个控件都以父控件的边框为坐标系在父控件内部占用一块矩形区域。Control 类负责处理控件的输入、渲染,同时负责接受鼠标焦点和按坐标自动调节控件的大小。 1.1.8 3D 渲染 Torque 库有一个模块化的、可扩展的 3D 渲染系统。游戏子类首先定义成像方位和视觉范围,然后调用 OpenGL 的画图命令画出 3D 场景。类负责确定视口,以及模型的
22、观察角度和投影矩阵。函数将返回当前受控对象 (玩家当前正在控制的模拟对象 )的成像角度,然后引擎将调用客户端场景图形对象渲染游戏环境。 在客户端 ,场景图形库负责监控整个游戏场景,并根据当前的成像角度决定应该渲染哪些对象;而在服务器端,它负责根据玩家在游戏中的视觉角度决定应该把哪些物体发送到客户端。整个场景被分为多个区域,每个区域由多个实心部分和入口组成。场景以外是一个单独的区域;内部对象可以有多个内部区域。引擎负责找出一个给定 3D 点在哪个区域以及拥有该区域的对象。然后引擎就能够决定哪个或哪些区域包含一个对象实例。在渲染的时候,整个场景将从包含摄像机的区域开始,按照在它之前的区域中设置的视觉入口剪辑每个区域中的对象。引擎还负责确定网络对象的处理范围, 决定一个给定对象是否需要由客户端处理。 场景中的每个能够渲染的对象都是从一个基类派生出来的。在刷新场景的时候,所有可见的对象都需要准备一幅或多幅用于渲染的图像,这些图像随后将被插入到当前场景中。图像先按透明性排列,然后渲染。这种方法允许在渲染一个带有多个半透明窗口的楼房时先渲染楼房,然后渲染其他对象,接着再渲染楼房的窗口。对象可以插入多张用于渲染的图像。 1.1.9 地形 地形库负责处理渲染外部场景模型的对象。它包含了 sky 对象,这个对象渲染外围的天空和有层次感的云层,并在渲染整个场景的时候通过设置明显的和 模