1、本 科 毕 业 论 文大型网络游戏系统A large-scale network game system姓 名:学 号:学 院:软件学院系:软件工程专 业:软件工程年 级:指导教师: 年 月摘要通过完成对一款大型网络游戏进行系统架构设计、流程与时序设计、类结构与接口交互设计、数据库设计以及实现了相关代码,学习了编写系统详细策划书的方法,以及了解了计算机图形学的相关知识。本文讨论了国内网络游戏的发展历程,调查了当今网络游戏市场在中国互联网市场中所占有的比例。介绍了该大型网络游戏游戏系统的历史背景以及用户的游戏体验。本文的主要内容包括:(1).通过研究 OGRE 图像渲染引擎的底层实现流程和使用方
2、法,并在其的基础上封装了一套集成游戏场景中各个功能模块的系统架构。这套架构对场景中每种功能进行了建模,抽象出相关功能模块;然后通过策略模式记录了各个模块的渲染流程和关键帧的事件,最终由一个主框架代理所有子模块的渲染。因此可以轻松地加入和删除每个渲染系统,能够轻易地完成各个三维场景、效果的加载、切换和卸载,进而达到了设计目的;(2).本文解决了游戏中从客户端注册向导和客户端场景同服务器的通信问题,独立设计了相应的 BS 网络架构和套接字连接池概念,为该游戏以后的设计和稳定运行奠定了基础;(3). 对 3D 图形图像学、OGRE 的底层实现方式、灰度图的实现原理碰撞检测原理以及 A*寻路算法都相应
3、的介绍。特别是对 OGRE 渲染部分的底层源码进行了剖析,并按仿照相应的流程进行了模仿,揭开了一些 OGRE神秘的面纱。关键字:网络游戏;OGRE;图形学;服务器; BS 架构;套接字连接池 AbstractIn order to finish A large-scale network game system, I designed sequences diagram, class structure and interface and database. At last, I learnt how to write the detailed planning book, and get t
4、he knowledge of computer graphics . The paper describes the development process and the prospects of online games in China. And give some ideas of the history and the players experience for this game. Now Let discuss the main contents of this article: Firstly, I create an open main framework for the
5、 game, through the study of the source code from the Objected-oriented Graphics Engine. The framework is based on OGRE render system. In order to make sure that all of the subsystems could be simply inserted in the frame, I used Strategy Pattern, Proxy Pattern to design the system, and separated of
6、all objects which you can see or not ,then designed a class for each. Abstract out of the various categories of common ground as a parent class, then get a clear class diagram. After that, when I need to switch scene, I could delete last scene directly, and apply for a new scene, and throw it to the
7、 main frame.Secondly, this article solved the problem of the data exchange between the register wizard and the server, and between client scene and the server。At the same time, it put forward “socket connect pool” concept, to insure the stability of the server.Thirdly, the article brief introduce so
8、me concepts about 3D Graphics render principle, OGRE underlie implementations, gray scale principle and A* algorithm。.Especially the bottom part of OGRE rendering system analysis, this article will reveal the mystery.Key words: Online games; OGRE; graphics; server; BS framework; socket connect pool;
9、目录第一章 引言 .11.1 研究背景 11.2 游戏体验和历史背景 21.3 系统实现的三大基本模块简介 3第二章 模型与主要技术介绍 .52.1 名词解释 52.2 主要技术概要 62.2.1 引擎介绍 .62.2.2 游戏引擎的组成 72.2.3 三维底层渲染技术 .82.2.4 灰度图原理 92.2.5 自动寻路系统与 A*算法介绍 .112.2.6 OGRE 底层渲染函数 startRendering 研究 122.2.7 角色动画在 Ogre 中使用研究 .142.2.8 OGRE 地形图实现介绍 152.2.9 AABB 包围盒技术介绍 16第三章 系统设计 .173.1 系统组
10、织架构 173.1.1 地图编辑器功能模块介绍 173.1.2 声音系统简介 183.1.3 粒子编辑器 193.1.4 人物模型系统 203.1.5 网络交互模块 203.1.6 游戏运行模块简介 .203.1.7 碰撞检测简介 213.1.8 自动寻路系统简介 .213.1.9 AI 模块简介 .213.1.10 即时聊天系统简介 .223.1.11 攻击效果计算系统简介 223.1.12 地图加载功能简介 .233.2 客户端向导设计 233.3 游戏客户端的设计 243.3.1 客户端游戏创建流程设计 243.3.2 客户端渲染主框架设计 263.3.3 游戏主场景渲染的设计 303.
11、3.4 主角一帧活动渲染流程 333.3.5 NPC 一帧活动渲染流程设计 .383.4 服务器端设计 393.4.1 服务器向导设计 393.4.2 服务器架构设计 413.4.3 服务器网络连接设计 .433.5 服务器数据库 51第四章 测试与部署 .534.1 服务器 534.2客户端 .54第五章 总结与提高 .555.1 总结 555.2 提高 55参考文献 .57致谢 .59演武 Online大型网络游戏系统6ContentsChap I Introduction 11.1 Background.11.2 The game experience and the historica
12、l background .21.3 The three basic modules of the game system .3Chapter II Model and the main technical presentations.52.1 Glossary.52.2 Technical Summary .62.2.1 Game engine introduced .62.2.2 Composed of 9 game engine .72.2.3 Underlying three-dimensional rendering of 82.2.4 Grayscale Principle .92
13、.2.5 Automatically find its way system and A * algorithm introduced112.2.6 OGRE rendering function startRendering of the underlying 122.2.7 OGRE topographic map to achieve Introduction152.2.8 AABB bounding box describes.16Chapter III System173.1 Systems Organization 173.1.1 Map editor function modul
14、e description .173.1.2 Sound System Introduction .183.1.3 Particle Editor193.1.4 People Model System203.1.5 Network interaction module203.1.6 Introduce of the game running module .203.1.7 Introduce Collision Detection .213.1.8 Automatically find its way Introduction .213.1.9 AI Module Description .2
15、13.1.10 Introduce real-time chat system 223.1.11 Introduce Attack Effect computing systems .223.1.12 Introduce map load function .233.2 Client Design Guide .233.3. Game client design 243.3.1 The client created the game design process 243.3.2 Design of the main frame of the client rendering .263.3.3
16、The design of the main game scene rendering 303.3.4 Lead an activity rendering process333.3.5 NPC a rendering process design activities, .383.4 Server-side design.413.4.1 Server Wizard Design .433.4.2 Server architecture 433.4.3 Server network connection design 453.5 Server database 51Chapter IV Exp
17、eriments and Results Analysis534.1 Server 534.2 Client .54Chapter V Summary and Outlook 555.1 Summary.555.2 Outlook55References 57Acknowledgements59第一章 引言1第一章 引言1.1 研究背景互联网在 20 世纪下半叶兴起。由互联网兴起所引发的数字化、信息化和全球化的革命正以迅捷的速度广泛影响着人们的社会生活,全方位的改变着人类社会的面貌,并且预示着人类已步入“网络社会”这一全新社会形态。在“网络社会”中,人们的生活、工作、学习、娱乐等都不可避免的与
18、网络相关。计算机技术、网络技术、通信技术的不断发展,刺激了“网络社会”同经济学领域的应用融合、产业融合以及市场融合。由此催生出了一个网络大产业网络游戏。网络游戏结合了声光、幻想、动作等因素,让玩家在游戏的虚拟空间中可以全然地、毫无估计的展现及自我释放。网络游戏除了提供给玩家休闲和娱乐的功能外,也透过游戏经营着玩家特殊的人际关系,获得各种不同的需求满足,体验着各种真实的情感。作为中国新兴的 IT 产业,网络游戏在 2000 年开始被大量引进中国市场,并随后开辟了中国网络游戏产业的纪元。自传奇,魔力宝贝,石器时代等国外网络游戏掀起了巨大的市场利益后,国内的网络游戏企业也如雨后春笋般出现。梦幻西游,
19、大话西游,征途,问道等 2.5D 游戏迅速火爆起来,带来了巨大的经济利益,网络游戏作为一种娱乐方式进入了人们的生活。 。与此同时,网易、巨人、盛大等熟悉的字眼理所当然的进入了世人眼中。根据中国互联网中心 2009年 1 月公布的第二十三次中国互联网络发展状况统计报告显示,截止 2008 年底,中国网民规模达到 2.98 亿人,其中,网络游戏用户比例从 2007 年的 59.3%提升至 2008 年的 62.8%。这一位置截止到 2008 年底,中国网络游戏用户已达1.87 亿人。艾瑞咨询报告指出,2008 年中国网游市场规模为 30.4 亿美元,约占全球网络游戏市场总收入的 27%,排名第二,
20、美国则以 29%位居榜首,韩国一21%排名第三。我国网络游戏市场规模直逼美国,在全球列为第二,占有极大地市场份额。可见,我国的网络游戏吸引着越演武 Online大型网络游戏系统2来越多的人参与,平均每 10 位网民中就有超过 6 位是网络游戏用户,网络游戏已经成为人们现实社会生活中不可忽略的一部分。并且引起了学术界人士的极大兴趣。针对网络游戏产业中各种不正当竞争手段对运营商和玩家造成的危害和损失的情况,已经有国内学者采用产业组织理论中的经典分析方法SCP范式来分析我国的网游产业,重点分析产业中的不正当行为(私服、外挂等问题) ,同时采用博弈论工具探究如果有效地址网游中的不正当行为的方法,为我国
21、网游产业的监督提供一个新的视角 1。1.2 游戏体验和历史背景在互联网深入人们生活的今天,娱乐交流已经成为大家生活中必不可少的元素。虚拟世界已经从当初的军用模拟战争操作系统,逐渐发展成为步入千家万户的集休闲、娱乐、交流、交易、学习于一体的网络系统。当今社会中有谁不看新闻,有谁不炒股,有谁不看小说,有谁不交流,有谁不想放松?作为工作之余的网络游戏,为大众搭建了一个交流,益智,休闲,娱乐的虚拟世界。玩家可以在其中体会动人的故事情节,感受扣人心弦的紧张剧情,完成各式各样的任务,调配各种属性,适应不同的生存环境,制作各种装备,制作美食,酿制药酒,体会团队合作的重要,欣赏炫丽的技能效果,感受消灭敌人的荣
22、耀,体验社会冷暖;玩家永远不知道下一刻有什么惊喜在等着他:是生存、还是死亡;是赚取大量的经验、还是获得可观数目的金钱;是久等不遇的奇珍异兽,还是平常无奇的敌人;是防御超强的盔甲、战帽,还是垂涎已久的朗基努斯之枪;是艳羡已久的美人,还是眼红抱拳的仇人;是绝世武功,还是遇到了指点迷津的师傅;是摆摊卖货,还是去集市淘金该游戏以十七世纪的中国历史为背景,讲述民族英雄郑成功传奇的一生。游戏中穿插明末清初的正史记录,作为游戏的支线任务。游戏中郑成功先后与清军,西南蛮夷士兵以及荷兰海军作战,最终攻占南京、收复了台湾,成为了民族英雄。本文所介绍的系统主要完成“将领”之间的对战功能,是一个支线任务,也是一个独立
23、的游戏,同时可以对“将领”进行测试。玩家们需要控制各自的将领,在武将战场上杀敌制胜。第一章 引言3“武将”战场上会不定时随机出现各种武器装备,补给品,军需用品,和临时技能等武将消耗品,玩家可以依靠这些消耗品配合有利的地形进行伏击和叫阵。但是取得胜利最终的还是要依靠玩家的等级,装备,技能以及团队合作等因素。“将领”们的等级来自常规对战,也就是在主线游戏中培养起来的角色参数。角色参数依靠玩家的升级,完成主线和支线任务的奖励,以及杀敌时幸运的获得对方掉落的宝物等而增长。1.3 游戏系统实现的三大基本模块简介网络游戏重点在网络通信,网络部分将使用 MFC 的网络套接字类 CSocket和 CAsync
24、Socket 进行可靠的网络数据传输,双方会直接发送和接受一个类,然后根据类中的命令变量来提取相应的成员;数据的主要部分为数据库模块,数据库主要采用 ado 实现连接。而客户端也要存贮部分大量玩家的数据,这里主要采用 MDB 的方式存储;游戏的根本在于画面场景的实现。游戏画面部分采用 OGRE 图像渲染引擎,在引擎中采取 DirectX 作为底层渲染库。通过引擎管理场景地形,人物模型,粒子效果,碰撞检测,分页等复杂图形和物理功能。第二章 模型与主要技术介绍5第二章 模型与主要技术介绍2.1 名词解释1.朗基努斯之枪:又称朗基努斯长矛,上面沾了耶稣的鲜血,带有无限神力,据说获得这把枪并解开其中秘
25、密的人将会左右世界的命运。2.团队合作:指将领们的合作杀敌,其中包括技能配合,合体技能,技能五行相克和五行相辅助,救活同伴等方式以实现 1+12 的杀敌效果。3. 角色参数:包括生命值,攻击力,防御力,魔法抗性,防御装备,攻击装备,五行相生相克的天性,机遇,幸运度,躲避敏捷度等。4. 序列化类的发送和接受,即把类成员以二进制的形式写入文本文件,然后把该二进制序列通过网络协议发送出去,接收方按照事先定义好的解析形式把二进制数据还原成为类的成员。主要通过 MFC 的序列化类 CArchive 实现。5. MDB 是微软 OFFICE 系列中的 ACCESS 数据库。6.这个粒子效果是固定在某个地点
26、,不属于人物技能效果。7.有限状态机:它包含了有限状态以及状态之间的转移,彼此连成一个有向图。有限状态机在每一时刻都只能处于某一状态。它主要用于整个游戏场景的管理或者操作单个的游戏对象和人物8.脚本语言:脚本语言是一种解释性语言,通常用于控制游戏中的 AI 模式。它在游戏中可以驱动事件、为非玩家角色的智能行为建模、实现某些任务的自动化等功能。9.模糊逻辑:该方法采用实数值来表示对象属于集合的程度。与传统逻辑相比,模糊逻辑的表达能力更为丰富和细致,因而能够进行更好的推理。它常用于游戏中的战略决策,输入输出信息的过滤,非玩家角色的健康状态计算以及情绪的状态变化等。10.决策树:决策树类似于一系列的
27、 IF-THEN 形式的条件判断。这种技术在游戏中可用于分类、预测和学习。11.audiere:一种便利高质量的袖珍音频 API 函数库, 支持文件操作、编码解码、混音、播放输出, 播放支演武 Online大型网络游戏系统6持 MP3,OggVorbis,FLAC,WAV,IT,XM,S3M,和 MOD 文件。12CEGUI:全称 “Crazy Eddies GUI System“,是一个专门的用户界面库,开源并且免费,它支持 DirectX8、DirectX9,除了可以作为 OGRE 的界面外挂,还支持另一个免费开源的 3D 引擎 Irrlicht。13窗口子类化:简单地说就是拦截“Wind
28、owProc”消息,重新改写消息处理函数以处理特定的消息,对非特定的消息继续调用原来的处理过程。14骨骼动画:模型具有互相连接的“骨骼”组成的骨架结构,通过改变骨骼的朝向和位置来为模型生成动画。不同的骨骼动画可以被结合到一起,比如模型可以转动头部、射击并且同时也在走路。一些引擎可以实时操纵单个骨骼,这样就可以和环境更加准确地进行交互模型可以俯身并向某个方向观察或射击,或者从地上的某个地方捡起一个东西。2.2 主要技术概要2.2.1 引擎介绍“引擎”是一种牵引汽车的一个重要机械装置,它可以称之为汽车的心脏,决定着汽车的稳定性和特有的性能。在游戏中,引擎的地位也是如此,玩家在游戏中所体验到的剧情、
29、角色、美工、音乐、动画及操作方式等内容都是由游戏的引擎所直接控制的。游戏引擎主要的工作是进行游戏中的物体成像、物理演算、碰撞运算、玩家角色的操作以及播放正确的音量和声音输出等必要的功能。如今的游戏引擎已经被发展成一种由许多子系统所共同构成的复杂框架系统。其系统从建立模型、画面成像、行为动画、光影处理、分子特效、物理演算、碰撞检测、数据管理、网络联机以及其他专业性的编辑工具与套件等等,它几乎可以涵盖整个开发过程中所有的重要环节,使得游戏可以得到更好的华丽画面与流畅度。 2可以这么说:引擎相当于游戏的框架,框架搭好后,关卡设计师,建模师,动画师只要往里填充内容就可以了。正是由于引擎的成功,使得游戏
30、的开发变得更简单更有效。游戏引擎是用于控制游戏功能的主程序,它像一个发动机,第二章 模型与主要技术介绍7控制着游戏的运行。一个游戏作品可以分为游戏引擎和游戏资源两大部分。游戏资源包括图象、声音、动画、脚本等部分,列一个公式就是游戏=引擎(程序代码)+资源(图像,声音,动画,脚本等) 3。游戏引擎则是按游戏设计的要求顺序调用这些资源。请看引擎的基本架构,如图 2.1 所示。公共模块服务端模块相关工具客户端模块图 2.1: 游戏引擎的基本架构2.2.2 游戏引擎的组成大部分游戏引擎都是有场景管理系统、图形渲染系统、资源管理系统、实体系统、碰撞检测系统、物理系统、消息处理系统、音效系统、脚本系统、输
31、入模块、网络模块等部分组成个的,每一个组件都独立与其他组件而工作,所有的独立组件都与同一个核心引擎进行交互从而达到协同工作的效果。关于基本组件和模块划分如表 2.1 和图 2.2 所示。表 2.1: 游戏引擎的基本组建用户输入 图形渲染 声音时间、同步 场景管理 碰撞、物理实体、资源 脚本 网络文件 I/O演武 Online大型网络游戏系统8动画系统引引擎的模块划分图擎资源 输入输出系统网络系统物理/碰撞探测系统擎事务处理系统引引擎的模块划分图擎3D图形引引擎的模块划分图擎图 2.2: 引擎模块划分2.2.3 三维底层渲染技术渲染和光栅化:先进行纹理贴图,包括创建纹理、建立表面和多边形贴图,然
32、后再进行光栅。具体实现过程如下:首先,创建阴影纹理;然后通过材质得到相应的光照图。光照图和纹理合成后就形成阴影表面实现了较为逼真的光照纹理效果;再次创建表面,得到表面后,在指定的多边形贴上表面,这样就完成了纹理贴图器的工作。最后由渲染器将其绘制到屏幕上。3D 裁剪:首先在世界坐标空间中进行物体剔除和背面消除,去掉一部分物体,减少了相机坐标转换的多边形数;然后在相机坐标空间中进行物体空间裁剪,但只用近裁面进行裁剪,其它面的裁剪交给光栅化时的图像空间裁剪。这种剪裁方式更简单更速度。因为如果对其它面进行裁剪会带来大量的 3D 运算,如果将其交给光栅化的图像空间裁剪会节省大量的计算,因为是 2D 运算
33、。 43D 流水线: 3D 流水线从开始经过各种贴图后再到结束时的流程,如图 2.3所示:第二章 模型与主要技术介绍9开 始创 建 纹 理 , 建立 阴 影 表 面建 立 阴 影 图建 立 表 面多 边 形 贴 图渲 染 和 光 栅 化结 束图 2.3: 3D 渲染流水线2.2.4 灰度图原理灰度图是游戏地形实现的一种方法,它简单,高效,便于存储,容易转换。灰度图中的颜色完全由黑,白和灰三种颜色组成,其中灰色是黑色和白色的差值,整体如同黑白相片的效果。在灰度图中,使用 256 级灰度颜色,既每一个像素的颜色范围是 0-256。其中每一种颜色值代表一个特定的高度。所以我们可以根据灰度的差值结合特
34、定的算法就可以快速创建出来一个外景三维地形。5下面请看为灰度图变换到三维地形的详细过程 6,如图 2.4 至图 2.8 所示。图 2.4: 灰度图演武 Online大型网络游戏系统10图 2.5: 三维等值线绘制图 2.6: 三维网格图绘制图 2.7: 三维颜色输出图 2.8: 三维网格填充绘制第二章 模型与主要技术介绍112.2.5 自动寻路系统与 A*算法介绍路径搜索算法可分盲目搜索和启发式搜索两种。盲目搜索就是按照一定的规则下去,不考虑节点带给的任何信息。盲目搜索算法主要包含纯随机搜索、广度优先搜索、深度优先搜寻以及它们产生的一些其他衍生算法; 启发式搜索就是在空间搜索时对每一个搜索的位
35、置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径从而提高效率。启发式搜索算法根据搜索时选取最佳搜索节点的策略不同可主要分为局部择优搜索法、最好优先搜索法两种算法。其中 A*算法是一种典型的最好优先搜索法。启发式搜索对于节点的评估采用评估函数表示:f *(n)=g*(n)+h*(n),其中f*(n)是节点 n 的评估函数,g *(n)空间中从初始节点到节点 n 的实际代价,h *(n)是从节点 n 到目标节点最佳路径的代价。如果一个评估函数可以找到最短的路径,成为至可采纳性。A *算法就是一个可采纳算法。由于 f*(n)是未知的,所以用f(n)做近似未知数
36、,同样 g(n)和 h(n)做近似已知数,但要保证 g(n)= g*(n),h(n)= h*(n)。算法中还需用到两个表,OPEN 表盒 CLOSED 表,分别存放未扩展的节点和已扩展的节点。具体的表述如下:(1).把起点 S 放入 OPEN 表,记该节点的 f = h,令 CLOSED 表为空表。(2).重复下列过程,直到找到目标节点为止,若 OPEN 为空表则失败。(3).选取 OPEN 表中未设置过的具有最小 f 值的节点为最佳节点bestNode,并把它放入 CLOSED 表中。(4).若 bestNode 为目标节点,则求解结束。(5).若 bestNode 不是目标节点,则扩展它,
37、产生后继结点 succssor。(6).对每个 succssor 进行下列过程:.建立从 succssor 返回 bestNode 的指针; 1.计算 g(SUC)=g(BES)+g(BES,SUC); 2.如果 succssor 数据 OPEN 表,则称该节点为 OLD; 3.比较新旧路径代价。若 g(SUC)g(OLD),则重新确定 OLD 的父辈 4节点为 bestNode演武 Online大型网络游戏系统12.若 OLD 节点的代价比较低或者一样,则停止扩展该节点 5.若 succssor 不在 OPEN 表中,则看其是否在 CLOSED 表中; 6.若 succssor 在 CLOS
38、ED 表中,则转向 。 7 3.若 succssor 既不在 OPEN 表中,又不在 CLOSED 表中,则把它放入 8OPEN 表中,然后转向 。 7(7).计算 f 值。(8).继续执行(2) 92.2.6 OGRE 底层渲染函数 startRendering 研究对于这个函数的研究关系到对代码的控制,透彻领悟后可以更好的实现设计和编码。首先请看相关代码mQueuedEnd = false;while( !mQueuedEnd )/Pump messages in all registered RenderWindow windowsWindowEventUtilities:message
39、Pump();if (!renderOneFrame()break;这个过程精简后的大致过程就是不断地调用 windows 事件处理队列messagePump()来分派窗口 GUI 消息事件,和调用 renderOneFrame()来更新帧事件。通常来讲,Ogre 所采用的 UI 插件库是 CEGUI,它通过窗口子类化的方式重载了常用的控件,所以对这些控件事件进行响应是必须的;renderOneFrame包括了 3D 图像渲染一帧的全部操作,函数里面通过 STL 的容器,向每一个注册了的监听对象发送渲染前,图像进入显卡翻转前,和渲染后事件,它是本文的第二章 模型与主要技术介绍13关键函数,在章
40、节 3.系统设计中几乎所有的时序图里的帧前、进入渲染队列前、帧后消息都是由这个函数发送出去的。下面揭秘 Ogre 引擎源代码renderOneFrame 的执行流程,如图 2.9 所示。进入r e n d e r O n e F r a m e厦门大学本课程学位论文 ,才盛一帧开始获得精确时间 , 并放入F r a m e E v e n t 类中g e t M i l l i s e c o n d s ( ) ; F r a m e E v e n t e v t ;将 F r a m e E v e n t发给每一个注册的监听类 ,并调用其F r a m e S t a r t e d
41、方法触发所有 F r a m e L i s t e n e r的 f r a m e S t a r t e d进入显卡渲染触发所有 F r a m e L i s t e n e r的 f r a m e R e n d e r i n g Q ue u e d更新所有渲染目标( 不翻转 )翻转所有渲染目标图 2.9: 函数 RenderOneFrame 内部流程其中一帧渲染结束的处理方式与一帧开始的处理方法相类似,故省略之。更新渲染目标部分需要更新所有渲染目标,比如镜头内部的全部物体,这个时候还没有进入显卡,仅仅改变它们的状态;然后进入更新所有目标物体,此时完全由显卡 GPU 控制渲染,
42、而 CPU 时间片出于空闲状态。如果把逻辑放在更新所有目标物体之后,就可以让 CPU 与 GPU 并行进行计算,从而提高效率。需要注意的是 GPU 开始渲染后 CPU 才开始工作,所以此时 CPU 处理的逻辑只有在下一帧才能渲染出来,但是这并不影响游戏的正常工作;最后交换缓冲区,即把演武 Online大型网络游戏系统14显存中的数据批量复制到内存中显示,类比双缓冲绘图的原理。2.2.7 角色动画在 Ogre 中使用研究动画的基本原理是多个关键帧组成一个动画轨迹,多个动画轨迹组成一个动画,这就如同将若干“画片”叠在一起,快速逐页翻过去时所产生的图片“动起来”的原理一样。每个关键帧具有自己的位置、
43、缩放比例和旋转角,同时每个关键帧还保存自己在整个动画轨迹里所处的时间点。在各个关键帧之间通过差值算法(Spline 差值或者线性插值)生成动画。在图形学中具体做法是创建一个关键帧,传入这一帧所在的时间点。根据当前时间,得到差值计算出来的下一帧。Ogre 中使用 Animation 类来管理动画,其中枚举了多种差值的方式:_OgreExport Animationenum InterpolationMode IM_LINER; /线性插值IM_SPLINE; /样条差值;/旋转差值Enum RotationInterPolationModeRIM_LINER;/线性旋转RIM_SPHERICAL
44、;/数值球星差值其中数值球星差值所得到的效果最为精确,但是消耗 cpu 内存、显卡的资源非常大,所以一般游戏不采用这种差值方式,只有某些专门的图形学软件才第二章 模型与主要技术介绍15会使用。每个动画类都要保存自己的动画轨迹列表,这个类存储着动画的名称和长度,并且影响着关键帧序列。一个动画轨迹可以指定其控制的节点,比如一块骨头或者场景的一个节点。如果骨头受动画轨迹控制,就可以实现骨骼动画;如果场景节点手动画轨迹控制,就可以直接实现场景节点的动画运动。通过传递参数当前时间、权重(计算差值时的增加量)和是否累计权重,是当前动画轨迹对其控制的节点产生作用。每个动画轨迹保存关键帧列表、本地动画轨迹所属
45、动画类(Animation) 、本地动画轨迹所控制的节点,又因为动画轨迹负责关键帧的差值,所以保存保存了 SimpleSpline(简单样条差值计算)和RotationSpline(旋转样条差值计算)两个类对其实现插值功能。在具体的代码实现中,通过 createKeyFrame 创建一个关键帧,传入这一帧所在时间点,然后根据当前时间,得到差值计算出来的当前帧,然后通过函数getInterpolatedKeyFrame 根据当前时间得到差值计算出来的当前帧,从而使模型的动作在关键帧之间产生平滑的过渡。动画状态类 AnimationState,是对动画类的控制,它包含了动画名、当前时间点,动画长度
46、、动画权重和动画是否播放(Enable)等重要变量。2.2.8 OGRE 地形图实现介绍OGRE 可以通过两个接口生成地形,分别是 void TerrainSceneManger 类的两个重载的静态函数 setWordGeometry(const String& fileName)和setWordGeometry(DataStreamPtr& stream,const String& typeName),第二个函数主要是传递一个流。Ogre 把整个地形分为若干个地形页,每个地形页又分成了多个地形小块,到最后会把地形页及地形小块通过节点挂接到场景上。下面是主要流程:1 清除地形分级索引缓冲及地形
47、分页,根据地形信息数据流通过函数loadConfig 加载地形信息配置文件;2 初始化分级索引缓冲;3 设置场景大小,当然这是需要根据创建场景管理器类型所决定,不演武 Online大型网络游戏系统16进行深入讨论;4 设置地形材质;5 设置分页,这也是要根据场景管理器类型决定,不进行深入讨论;2.2.9 AABB 包围盒技术介绍一个给定对象的轴向包围盒被定义为包含该对象且各边平行于坐标轴的最小六面体,在碰撞检测的研究历史中使用的最久最广,AABB 计算十分简单,只需要分别计算组成对象的基本几何元素集合中各个元素顶点的 x,y 坐标和 z 坐标的最大最小值即可 16,换句话说就是拿一个箱子“套住
48、”角色,并且实时计算这个箱子是否和其他箱子有交集。第三章 系统设计17第三章 系统设计3.1 系统组织架构首先需要了解游戏整体组织架构的设计,如图 3.1 所示。地 图 编 辑 器粒 子 系 统 编 辑 器游 戏 演 示游 戏 架 构高 度 图粒 子 效 果静 态 模 型动 态 模 型声 音高 度 碰 撞 检 测点动 态 粒 子静 态 粒 子物 理 碰 撞 检 测自 动 寻 路 系 统A I 与 控 制 接 口即 时 聊 天 系 统攻 击 效 果 计 算人 物 模 型 系 统换 装 系 统A I 脚 本 系 统地 图 读 取 功 能网 络 交 互 模 块网 络 会 话 基 础网 络 指 令 指
49、 令 序 列 化客 户 端服 务 器数 据 库 模 块数 据 库 交 互 层数 据 库 控 制 层图 3.1: 游戏戏整体的组织架构图本系统主要分为五个主模块,它们分别是地图编辑器,粒子系统编辑器,网络交互模块,人物模型系统和游戏演示。每个模块分别完成独立的任务。其中地图编辑器,粒子编辑器是游戏设计时的辅助工具,但是对游戏的实现起着重要的作用;网络交互和人物模型是嵌入到游戏演示中的关键性模块,对玩家之间的交互和玩家同游戏之间的交互起着决定应作用。3.1.1 地图编辑器功能模块介绍地形作为自然界最复杂的景物之一,对其更加真实的实现一直是游戏行业追逐的目标之一。地形实现了意味着演武 Online大型网络游戏系统18整个游戏已经实现了一半。地图编辑器主要完成地形图的快速设计功能,并按照定义好的格式存储,供游戏演示模块调用。地图编辑器模块主要包括六个子模块,它们分别是粒子效果,静态模型,动态模型,高度碰撞检测点,高度灰度图和声音。粒子效果绘制了地形图中的特效,比如火焰,瀑布,烟雾,灰尘,水面,夕阳等;静态模型是地形中不会动的模型,主要包括房屋,数目,祭坛,井,死人等;动态模型曾强了地图的逼真效果,是虚