(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf_第1页
(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf_第2页
(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf_第3页
(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf_第4页
(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf_第5页
已阅读5页,还剩66页未读 继续免费阅读

(计算机应用技术专业论文)3d游戏引擎的设计与实现(1).pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

中文摘要 t g x 引擎系统是本人自主开发的一款游戏引擎,本文首先介绍了关于游戏引 擎的相关术语,然后主要对于t g x 引擎的整体构架及其核心模块的设计与实现作 了详细分析。该引擎是一款基于w i n d o w s 和d i r e c t x 的游戏引擎,目的主要用于 小型网络游戏。引擎包括渲染器、场景管理、特效、g u i 、音效、动画、输入、 网络等模块。同时,还实现了一些d e m o 来验证对应功能模块的效果。 t g x 引擎采用了分层与模块化设计原则,由四个接口和两个静态库构成,包 括四个主要功能模块,每一个模块使用一个接口并且由一个d l l 实现。四个主要 的模块分别是渲染系统、输入系统、声音系统和网络系统。对于渲染系统和网络 系统采用了分层设计的思想来进行设计,对于输入系统和声音系统则是在 d i r e c t x 提供的功能的基础上,进行了简单的封装。 t g x 引擎中的主要工作包括: 模块化的设计。采用接口方式使对象的定义与实现分开,每一个接口可以有 多个不同的实现,而且还可以方便地改变其中的一些模块的实现。 分层的渲染系统的架构:优化的数学库、灵活的渲染器、蒙皮骨骼动画、多 种类的g u i 。 设计并实现了对b s p 结构的室内场景的场景管理。 基于d i r e c t i n p u t 的输入系统和基于d i r e c t s o u n d 的三维音效。 设计并实现了基于w i n s o c k 的网络管理。 本文先描述了游戏引擎的基本概念和设计规则,接着分析了t g x 引擎的架构 及其核心模块,并讨论了核心模块的设计与实现。 关键词:游戏引擎数学库渲染器场景管理骨骼动画网络 a b s t r a c t t g xe n g i n ei sd e s i g na n di m p l e m e n tb ym y s e l f t h i sp a p e ri n t r o d u c e d s o m e i t e m sa b o u t3 dg a m ee n g i n ef i r s ta n dt h e na n a l y z e dt h ed e s i g na n di m p l e m e n i a t i o no f g a m ef r a m e w o r ka sw e l la sc o r em o d u l e s o ft g xe n g i n e t h i se n g i n ei sa3 dg 锄e e n g i n ew h i c hi sb a s e do nw i n d o w sa n dd i r e c t x a n di t su s e df o rd e v e l o p i n gs m a l l s e a l e do n l i n eg a m e st h i se n g i n eh a sm o d u l e si n c l u d e sr e n d e r , s c e n em a n a g e m e m , g u is v s t e m ,s o u n d ,a n i m a t i o n ,i n p u ts y s t e m ,n e tm o d u l e ,e t c a t t h es a m et i m e ,s o r e e d e m o sa r ei m p l e m e n t dt ov a l i d a t et h ef u n c t i o n a l i t yo ft h ec o r r e s p o n d i n gm o d u l eo f t h et g x e n g i n e t h et g xe n g i n ew a sd e s i g n e dw i t ht e c e n o i o g yo f m o d u l a r i z a t i o n i tc o n s i s t so f o u ri n t e r f a c e sa n dt w os t a t i cl i b r a l i e s t h e r ea l ef o u rm a i nm o d u l e so ft h ee n g i n e e a c ho n ei sd e f t n e du s i n ga ni n t e r f a c ea n de a c hi si m p l e m e n t e di nas i n g l ed l l o fi t s o w n t h em a i nm o d u l e sa l et h er e n d e rd e v i c e ,t h en e t w o r kd e v i c e ,t h ea u d i od e v i c e , a n dt h ei n p u td e v i c e t h er e s e a r c hw o r ko ft h et g xe n g i n em a i n l yf o c u s o nt h ef o l l o w i n gf o u ra s p e c t : t h em o d u l 撕z e dd e s i g n u s et h et e c e n o l o g yo fi n t e r f a c em a k et h ed e s i g na n dt h e i m p l e m e n ta p a r t e a c hi n t e r f a c ec a nh a v es e v e r a ld i f f e r e n ti m p l e m e n t a t i o n s ,a n d c a n s i m p l yc h a n g ea n ym o d u l eo f t h ee n g i n ew i t h o u ta f f e c to t h e rp a r to f t h ee n g i n e t h el a y e r o u to ft h ea r t h i t e e t u r eo f t h er e n d e rm o d u l e :t h eo p t i m i z e dm a t hl i b e r a r y , f l e x i b i er e n d e r ,s k i n n e ds k e l e t a la n i m a t i o n ,a n daf e wg u i c o n t r o l s d e s i g na n d r e a l i z et h es c e n em n a g a e m e n tw i t hb s ps t r u c t u r e t h ei n p u ts y s t e mb a s e do nt h ed i r e c t l n p u ta n dt h es o u n ds y s t e mb a s e do nt h e d i r e c t s o u n d d e s i g na n dr e a l i z et h en e t w o r k m o d u l eb a s e d o nw i n s o c k t h i sp a p e rd e s c r i b e ds o m ei t e m sa b o u t3 dg a m ee n g i n ef i r s t ,t h e na n a l y z e dt h e 剐_ c h i t e c t l i r eo ft g xe n g i n ea n dh o wt od e s i g na n di m p l e m e n to ft h ef o u r c o r e m o d u l e s k e yw o r d s :g a m ee n g i n e ,m a t h e m a t i cl i b r a r y ,r e n d e r ,s c e n e m a n a g e m e n , s k e l e t a la n i m a t i o n ,n e t w o r k 独创性声明 本人声明所呈交的学位论文是本人在导师指导下进行的研究工作和取得的研 究成果,除了文中特别加以标注和致谢之处外,论文中不包含其他人已经发表或撰 写过的研究成果,也不包含为获得丞洼太堂或其他教育机构的学位或证书而使 用过的材料。与我一同工作的同志对本研究所做的任何贡献均已在论文中作了明确 的说明并表示了谢意。 学位论文作者签名:兽谚彳 签字日期:2 呻7 年2 月日 学位论文版权使用授权书 本学位论文作者完全了解丞洼太堂有关保留、使用学位论文的规定。特 授权丞洼太堂可以将学位论文的全部或部分内容编入有关数据库进行检索,并 采用影印、缩印或扫描等复制手段保存、汇编以供查阅和借阅。同意学校向国家有 关部门或机构送交论文的复印件和磁盘。 ( 保密的学位论文在解密后适用本授权说明) 学位论文作者签名:茄彻彳 导师签名:廷强 签字日期:叩年月6 日签字日期:呷年z 月2 z 日 天津大学硕士学位论文第一章绪论 1 1 引言 第一章绪论 在当前游戏市场,欧美游戏产业仍然牢牢占据着市场主流。成熟、完善的引 擎技术是他们占领市场的不二秘诀。长久以来具有较高技术水平,被广泛使用的 引擎均是国外公司的产品。引擎对于一款游戏的重要程度好比心脏对于人,引擎 的好坏直接决定了游戏的质量。根据研究,市面上流行的知名大作虽然类型各异, 但他们成功的原因都有着一个共同点,那就是采用了优秀的游戏引擎。 近些年来国内的网络游戏产业飞速发展,众多中小型网络游戏开发企业如雨 后春笋般在各地出现。但令人遗憾的是始终没有一款可以达到商业化的通用网络 游戏开发引擎面市,这也直接导致了国内公司开发游戏的成本与风险居高不下。 目前情况稍稍改观,但也仅有为数极少的国产引擎正在试水游戏开发。 1 2 游戏引擎相关概念 1 2 1 游戏引擎 游戏引擎就是一个处理游戏底层技术的平台,是在对部分通用技术细节进行 整理和封装的基础上,形成一个面向游戏应用的应用程序接口( a p i ) 函数( 称之 为“引擎”) ,游戏开发人员可以不用花过多精力去处理系统架构、内存管理、 图像绘制等一些底层的技术,可以直接使用引擎提供的a p i 来进行游戏开发,从 而大大减少开发人员的工作难度和工作量,显著缩短开发周期。引擎是借用了机 器工业的同名术语,表明其在整个系统中的核心地位。在这里,也可以把它称之 为“支持应用的底层函数集”,或者说是对特定应用的一种抽象。 经过不断的进化,如今的游戏引擎已经发展为一套由多个子系统共同构成的 复杂系统,从建模、动画到光影、粒子特效,从物理系统、碰撞检测到文件管理、 人工智能、网络特性,还有专业的编辑工具和插件,几乎涵盖了开发过程中的所 有重要环节。 更通俗地说,游戏引擎就是“用于控制所有游戏功能的主程序”,从计算碰 撞、物理系统和物体的相对位置,到接受玩家的输入,以及声音的输出等等功能 都是游戏引擎需要负责的事情。它扮演着中场发动机的角色,把游戏中的所有元 天津大学硕士学位论文第一章绪论 素捆绑在一起,在后台指挥它们有序地工作。因此,无论是2 d 游戏还是3 d 游 戏,无论是角色扮演游戏、即时策略游戏、冒险解谜游戏或是动作射击游戏,哪 怕是一个只有l 兆的小游戏,都有这样一段起控制作用的代码。游戏引擎相当于 游戏的框架。框架搭好后,关卡设计师、建模师、动画师只要往里填充内容就可 以了。 1 2 23 d 引擎 3 d 引擎作为一个名词已经存在了很多年,但具体什么是3 d 引擎,以及3 d 引擎应该实现什么样的功能,这些问题一直是众说纷纭,没有一个统一的说法, 即使是一些专业的引擎设计师,也很难就它的定义达成一个共识。我无法准确的 定义3 d 引擎的含义和作用,因为针对不同的用户和开发项目,3 d 引擎完成的 功能可能都有不同。而且引擎具体的功能和项目背景及应用环境有很大的关系。 在不同的项目中,要求不一样,那么应该具有的功能自然要有所区别。但是,众 多说法当中,还是有一些共同点,也就是最为基本的功能。通常来说,3 d 引擎 作为一种底层工具支持着高层的图形软件开发。你可以把它看成是对3 da p i 的 封装,对一些图形通用算法的封装,对一些底层工具的封装。因此,从功能的角 度来定义3 d 引擎,这种定义法也许能更确切的表达出一个3 d 引擎的真实含义。 3 d 引擎最基本的功能应该包括:1 ) 对3 维场景的数据管理;2 ) 功能合 理的渲染器;3 ) 与外部软件的交互能力。有了上面3 种功能,就基本上可以称 为3 d 引擎了。 1 2 3a plsv s3 d 弓i 擎 由于各个不同的计算机硬件有所区别,显示卡的型号各不相同,这就给我们 的3 d 开发带来了极大的困难,因此,采用一个通用的开发工具,避免对硬件的 直接访问,是3 d 开发所应该具备的。有些开发软件包就提供了这样一些功能函 数,可以屏蔽对于底层硬件的处理。比较知名的函数集有d i r e c t 3 d 、o p e n g l 、 j a v a 3 d 和o p e n l n v e n t o r 。游戏开发中应用比较广泛的是o p e n g l 和d i r e c t 3 d 。 虽然o p n e g l 或d e r i c t x 在游戏开发制作中具有许多优秀的性能,但是在游 戏开发中直接使用它们仍存在一些缺点:1 、都是非面向对象的,设计场景和操作 场景中的对象比较困难。2 、主要使用基层图元,在显示比较复杂的场景时编写 程序相对困难。3 、没有与建模工具很好的结合。4 、缺乏对一些十分重要的关键 技术如l o d ( l e v e lo f d e t a i l ) 、动态裁剪等的支持。基于以上情况,程序开发人员 非常需要一个简单易用、功能丰富的三维图形引擎来提高他们开发应用程序的效 率。 天津大学硕士学位论文第一章绪论 引擎最大的特点就是具有“驱动性”,l l p 弓l 擎仅仅在功能上支持某个方面 的应用,但具体的实现细节则依赖于应用本身。其次,引擎具有“完整性 的 特点,即引擎是能完整实现某个方面功能的函数集。第三,引擎还具有“独立性 的特点,即引擎可以不依赖于具体的应用而独立存在。 如上所述,虽然o p e n g l 和d i r e c t x 这些函数集提供介于应用程序和硬件之 间的软件接口,但是这些接口的集成度比较底,不能自动的协同工作。按照上述 引擎所具有的特点来判断的话,这些函数集的驱动性、完整性和独立性都和真正 的引擎相差太远,所以,严格来说,这些函数集往往被称为3 d 管线,而不是3 d 引擎。 1 2 4o p e n g lv sdir e c t 3 d 目前流行的3 d 开发环境有两种:o p e n g l 和d i r e c t 3 d 。o p e n g l 是一个函 数库,而d i r e c t 3 d 基于c o m 接口。在支持硬件提供的新功能时,d i r e c t 3 d 通常 提供一个新的版本,而o p e n g l 则提供一个扩展实现此功能的插件。这两个软件 实现相似的功能,随着不停地更新,两者功能越来越相似。但是实现相同功能的 方式却有所不同。对于游戏开发者来说,这两个都是优秀的系统,没有必要厚此 薄彼。 对于游戏引擎的开发,除了可以使用如o p e n g l 和d i r e c t 3 d 这样的开发环 境提供的图形a p i 函数之外,还有另外一种选择,就是开发自己的图形a p i 函 数这同样各有优劣。 使用特定的图形a p i 函数,可以简化问题的处理,减少设计和编码测试的工 作量,提高程序的稳定性和性能,缩短开发周期,节约开发成本。如果不使用特 定的图形a p i 函数,那么有些最为底层的工作就需要自己完成,比如文件的读写, 异常的处理等等,而且为了适应各种不同的开发环境,还要进行代码抽象,实现 自己的a p i 接口,这才能使得引擎不拘泥于任何第三方a p i 的束缚,使自己的 引擎更大灵活,功能的扩充和处理更为方便,可以在任何时候切换在自己想使用 的a p i ,而不需要改变游戏代码。当然,付出的代价就是更多的人月,更多的成 本和更大的不确定性。 1 2 5d ir e c t 3 d 的特点 本文在实现具体功能的时候,用到了d i r e c t 3 d 所提供的一些辅助对象和接 口。所以,对于d i r e c t 3 d 的特点专门介绍一下。 d i r e c t x 是微软公司开发的运行于计算机平台的多媒体控制处理软件包。基 于d i r e c t xa p i ( 应用程序编程接口) 开发的多媒体软件可以运行于硬件抽像层 天津大学硕士学位论文第一章绪论 ( h a r d w a r ea b s t r a c t i o nl a y e r ,h a l ) 上,即充分利用了系统硬件的加速功能,又 隐藏了硬件相关的设备特性,通过编写与设备无关的高效代码,d i r e c t x 程序总 是能以最佳方式运行,因此具有效率高,并且易于开发的特点。 1 3 国内外研究现状 国外对三维游戏引擎的研究,一开始主要集中在几个大公司,如3 dr e a l m s , i ds o f t w a r e ,v a l v e 等大公司,它们研究开发三维引擎,如q u k a e 系列和u n e r a l 系列等代表着三维游戏引擎最新技术和发展。2 0 0 0 年以后,随着游戏引擎的发 展,相继有多个开源游戏引擎的组织成立,并且开发了几款优秀的开源的游戏引 擎,如o g r e 、n b e u l a 等。虽然这些开源引擎的水平可能不及商用引擎,但其免 费和开源的优势使之拥有了一大批使用者并且流行于图形爱好者之间。 国产游戏产品研发一直比较落后,而游戏引擎的研发前期投入高、风险大则 更加无人问津。所以相比国外十数年的游戏引擎发展历史,国内的引擎发展可以 说尚处于幼年阶段。由于中国游戏引擎开发的落后现状,所以,不少计划进入自 主游戏研发领域的中国公司纷纷做出了从国外购买游戏引擎的决策,这其中不乏 u n r e a l 等价格昂贵的知名大作。然而,购买国外引擎的硬伤同时也令本土厂家痛 苦不堪。第一:成本昂贵,价格是大多数中小型游戏开发商无法承受之重;第二: 国外厂商对国内市场重视程度不够,很难保证良好的售后服务;第三:人员的沟通 不便,出现技术问题不能得到及时的解决。所以,国情决定国产引擎的大发展也 是一条必然之路。 目前真正的国产3 d 游戏引擎并不多,能够商用的也极少。目前有些知名度 的国产3 d 引擎,以现有的资料看,有以下几个: 国产3 d 引擎有涂鸦软件公司发布的起点引擎( o r i g i n e n g i n e ) 。真正的国产3 d 游戏引擎的起步要推涂鸦软件公司发布的起点引擎( o r i g i n e n g i n e ) 。“起点引擎”, 意如其名,这款引擎希望成为中国本土化引擎的一个起点。起点引擎不论是在画 面效果还是在渲染性能上,都有出色的表现,己初步具备了同国外游戏引擎相抗 衡的实力。在内容创建工具上,起点引擎也提供了强大的集成式编辑工具一起点 编辑器,能满足各种类型游戏的内容创建工作。 c l e a n w o r l d 是浙江缔顺科技自主研发,国内首款达到国际一流水平的3 d 网 络游戏通用开发引擎。c l e a n w o r l d 引擎具备完整的3 d 图形引擎和服务器端架构, 可以适用于各种m m o r p g 和休闲游戏的开发。c l e a n w o r l d 与其他引擎相比较, 以易用性作用引擎的核心,可以让开发者把更多的精力,放到程序、美术资源的 开发上面。 天津大学硕士学位论文第一章绪论 o v e r m a xs d k 是由目标软件自主研发,拥有完全的自主知识产权,并入选 国家“网络游戏核心技术开发及平台化”课题的平台工具,具有灵活、成熟、强大, 以及本地化、政府认可等特点。 再有就是一些个人研发的研究用的3 d 游戏引擎,从各方面与商业级游戏引 擎差距太大。虽然接触过几个,但是都处在初级阶段,不够成熟,不能商业应用。 虽然国内的游戏引擎有了一定的发展,但相对于国外来说,差距还是比较明 显! 但是国内游戏发展进步较快,尤其随着国家政策的引导,高校研究的跟进, 高端人才会不断涌现,国内研究游戏开发以及游戏引擎开发的人才越来越多,必 然会推动游戏制作水平的进一步提升。 1 4 研究价值及意义 三维图形技术在建筑虚拟、城市规划、场景漫游、效果场景制作、城市规划、 房地产开发、虚拟教育、展馆展示、古迹复原、交通线路设计、3 d 游戏等各方 面都有广泛的实际应用。特别是近两年,中国的网络游戏产业目前正处于一个迅 猛发展的时期,网络游戏己经形成为一个巨大的产业。从整体上来看,目前中国 网络游戏产业的发展呈现出统一性和协调性,并且逐渐形成了完整的产业链,网 络游戏出版产业的价值链涉及到了电信行业、软件行业、媒体、传统出版行业、 批发与零售行业等。 但是目前,我国的三维游戏开发比较落后,没有自己的品牌引擎,所开发的 游戏大多是引进的日韩和欧美的游戏引擎,而国外游戏引擎的核心代码是不公开 的,因此研究三维图形引擎中的关键技术是一次有意义的尝试,现在一些高校和 研究所加入了研究三维图形引擎的行列,这无疑将对我国三维引擎方面的进步起 到积极的作用。 成熟的图形引擎不仅可以用于游戏开发,并且可以用于教育、建筑、文物保 护和地理信息系统等其他领域,三维图形引擎亦是虚拟现实技术的基础,而虚拟 现实已经广泛的应用于军事训练、企业生产、科研、娱乐和商业应用等方面。 1 5 评判标准 一个游戏的设计开发要成功,其基本的必要条件有三。分别为v i s i o n ( 设计) 、 t e c h n o l o g y ( 技术) 、和p r o c e s s ( 过程) 。三个条件,缺一不可。 如果缺了v i s i o n ,做出来的游戏只是炫耀各种技术的演示而已。而缺了技术, 则v i s i o n 根本无法实现。如果缺了p r o c e s s ,则可能游戏质量不稳定、b u g 无数、 天津大学硕士学位论文第一章绪论 项目拖期、成本超过预算。这三个条件,实在是游戏设计与开发的三大基石。缺 了一个,游戏就成了站不稳的瘸腿猫。 我们更可以用这三个方面的指标去衡量一个公司的游戏设计开发的实力,图 1 - l 显示了一种叫做v t p 图的方法【12 1 。 公a 人 燃融嗽嘲跏隧蛐翮黼撇翩冁 羹鬣公霉 基零凳萄审毽焖 图1 1v t p 示意图。 用三个坐标来表示v i s i o n ,t e c h n o l o g y , p r o c e s s 。在三个坐标上根据一个公司 在此方面的实力做出标识,然后把三个点连接起来,形成一个三角形。三角形面 积越大,说明这个公司游戏设计开发能力越强。上面显示了一个一般美国公司和 日本公司的v t p 。可以看到美国公司和日本公司相比,技术上和过程控制上占 一定优势,而v i s i o n 略逊。日本公司在v i s i o n 上更突出,技术上比美国公司稍 微差一点,过程控制差得更多一点。最右边显示的是一个中国公司的v t p , 其三 角形的面积比其他两个公司小多了。我们更可以看到中国公司和外国公司比,技 术上的差距反而是最小的,v i s i o n 上差一截,最迫切需要改进的则是过程控制。 v t p 图不仅可以作为公司自我评估的工具,也是制定公司长期发展策略的有力 武器。 1 6 研究方向 t g x 引擎是本人在研究了z f x ,o g r e 等开源引擎以及d i r e c t x 的d x u t 框 架的基础上,结合t o r q u e 引擎的使用经验,实现的一个中小型个人研究的引擎 系统。该引擎是一款基于w i n d o w s 和d i r e e t x 的三维游戏引擎,包含了渲染器、 场景管理、特效、g u i 、音效、动画、输入输出、网络、a j 等模块。目前仅是初 具雏形,功能尚不完善,性能有待提高,需要从各个方面进行改进。 引擎的发布采取c o m 组件的形式,分为多个功能上相互独立或相互之间接 口简单的c o m 组件,c o m 对象的实现形式为动态链接库d l l 。 天津大学硕士学位论文 第一章绪论 本文将从t g x 引擎的整体构架切入,详细分析引擎中4 个核心模块的设计 及实现。 天津大学硕士学位论文第二章游戏引擎的总体架构 第二章游戏引擎的总体架构 本章主要介绍t g x 引擎的总体架构。首先介绍进行架构设计或者模块划分 的指导原则,然后简要介绍设计到的知识点,最后是模块划分及各模块功能的 粗略介绍。 2 1 设计原则 l 、抽象,封装。在计算机领域,我们使用得最广的方法,就是抽象、封装。 每个系统,都是像洋葱一样,一层接一层,从内到外;每一个组件,都是建立在 比其更为底层的基础之上。依据这个方法来设计游戏引擎,是非常合适的;尤其 是一些关键性的组件,我们可以直接替换掉它们,使引擎能够适应新的硬件,新 的平台。 2 、设计模式的使用。设计时最常见的错误就是,各个模块划分不清,也就 是说,哪些部分该完成哪些工作并不十分明确。这看似小问题,但其实是软件开 发中最头痛的一个问题。可以看一看设计模式,有很多的模式就是专门为了解决 这个问题而存在。我们需要进一步提炼程序中的“原子”操作,再将这些“原子”操 作放到合适的地方。 3 、重构以避免类爆炸问题。简单的按照功能划分出类,很容易出现类爆炸 问题,再加上我们习惯了最简单的扩展、修改类行为的方法继承,使得引擎 中的组件数目不断增多。这样就增加了系统的复杂度。如果我们需要替换一个子 系统,我们就不得不替换子系统中大量的类,或者是一整颗庞大的继承树。解决 这个问题的方法,就是从大处开始设计,或者,不断的重构,合并公共的操作, 提炼继承子类、改为组合的方式等等。从大处开始设计,就是先让一个类做很多 工作,然后再根据需要,修改其粒度,把应该独立的部分抽象出来;而不是一开 始就考虑好所有的可能性,讲系统分解成太细的碎块。后面一种方式,通过重构 的方式,也许实践起来更方便一些,可以随时测试一段代码的正确性( 测试后行) , 可以先写测试用例,然后再完成这些功能( 测试先行) 。反正不管是怎么实现, 都是需要不断的重构。好的设计还来自不断的重构,而不仅仅是来自设计本身。 4 、接口的使用。如果引擎的某些部分需要跨平台,最可能的就是在m m o 游戏中,网络部分、内存管理部分、甚至是物理部分等等。最好使用接口的方式 天津大学硕士学位论文第二章游戏引擎的总体架构 进行编写,接口的设计一定要科学,比如,有时候v o i do p e n f i l e ( c o n s tm y s t r i n g & f n ) ;就没有v o i do p e n f i l e ( c o n s tc h a r 卑f n ) ;要好因为前者使用了m y _ s t r i n g 类, 而这个类,也会是跨平台工作的一个部分;不过也要分清楚使用情况,有时候我 们需要用i n t ,u n s i g n e d ,而另外一些时候,用i 3 2 ,u 3 2 之类的定义会更好。 5 、分层思想。从c 4 引擎的模块图,可以清晰的看到它分层的设计原则, 并且每个类之间的依赖关系、交互方式都定义得非常清晰。最后总结一下分层设 计的好处:易于扩展、替换组件,而不需要修改整个系统;容易跨平台,实现重 用;接口和实现分开,优化工作不需要修改其他部分的代码( 特别是多线程优化) 等等。 2 2 技术基础 本章中进行架构设计,到最后进行发布的时候,涉及到的几个技术知识点, 下面简要介绍。 2 2 1 接口( i n t e r f a c e ) 接口可使您将对象的定义与实现分开,因而是一种功能强大的编程工具。接 口继承和类继承各有优缺点,和类一样,接口也定义了一系列属性、方法和事件。 但与类不同的是,接口并不提供实现。它们由类来实现,并从类中被定义为单独 的实体。 接口表示一种约定,实现接口的类必须严格按其定义来实现接口的每个方 面。 有了接口,就可以将功能定义为一些紧密相关成员的小组。可以在不危害现 有代码的情况下,开发接口的增强型实现,从而使兼容性问题最小化。也可以在 任何时候通过开发附加接口和实现来添加新的功能。 虽然接口实现可以进化,但接口本身一旦被发布就不能再更改。对已发布的 接口进行更改会破坏现有的代码。若把接口视为约定,很明显约定双方都各有其 承担的义务。接口的发布者同意不再更改该接口,接口的实现者则同意严格按设 计来实现接口。 t g x 引擎系统目前基于d i r e c t x 系统,为了有更好的扩展性,即以后可以支 持如o p e n g l 等其他的图形a p i ,那么需要提前设计好接1 2 1 ,在实现的时候,可 以用d i r e c t x 实现,也可以用o p e n g l 实现,调用的时候,则可以由用户自己选 择。一些商用级别的引擎往往实现了类似的功能。 天津大学硕士学位论文 第二章游戏引擎的总体架构 2 2 2 动态链接库( d l l ) 与导入库( l i b ) 静态链接库与动态链接库都是共享代码的方式。 静态链接:在程序开发中,您将各种目标模块( o b j ) 、编译时期链接库( l i b ) 文件,以及经常是已编译的资源( r e s ) 文件连结在一起,以便建立w i n d o w s 的e x e 文件,这时的连结是静态链接。每个用静态链接库生成的应用程序均具 有作为单独的副本链接到其可执行映像中的库代码。 动态链接库( o l l ) :是作为共享函数库的可执行文件。动态链接提供了一 种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一 个d l l 中,该d l l 包含一个或多个已被编译、链接并与使用它们的进程分开 存储的函数。d l l 还有助于共享数据和资源。多个应用程序可在磁盘上共享 d l l 的一个副本,可同时访问内存中单个d l l 副本的内容。 动态链接与静态链接的不同之处在于:动态链接允许可执行模块( d l l 文件 或e x e 文件) 仅包含在运行时定位d l l 函数的可执行代码所需的信息。在静 态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到 可执行文件中。 使用动态链接代替静态链接有若干优点:d l l 节省内存,减少交换操作, 节省磁盘空间,更易于升级,提供售后支持,提供扩展m f c 库类的机制,支持 多语言程序,并使国际版本的创建轻松完成【2 l 】。 2 3 引擎的结构 t g x 引 图形用户接口 i 动画 j 特效 i 场景管理 t g x c o m b , 毒,r 渲染管理 声音管理1 输入管理l | 网络管理 lll : 数学库日志系统 图2 1 引擎的层次结构 最下面一层是由数学库和日志系统组成的基础服务层;中间一层是由渲染管 天津大学硕士学位论文第二章游戏引擎的总体架构 理、声音管理、输入管理、网络管理组成的系统管理层;最上面一层是扩展与用 户接口层。 游戏引擎如果设计取决于开发人员的需求,因此开发或者分割引擎的方法不 止一种。通常,最好是将无关的系统分割成不同的动态链接库( d l l ) ,可以更 为容易地将更新应用于各个模块,而不会影响该程序的其他部分,这样可以更方 便地将改动过的软件更新、修改和发布给用户。 t g x 引擎系统分割成多个d l l 。虽然从文件构成上分成若干个d l l 文件, 但是其中一些文件从功能上划分,也可以归并为同一个模块中,只是因为在引擎 系统中实现的层次不同,才划分为多个文件。比如数学库处于整个系统的底层, 而且更多的为渲染系统提供服务,所以,本文叙述中,把数学库也归结到渲染系 统进行介绍。 如2 1 图所示,t g x 引擎系统的总体架构图。 图2 - 2t g x 弓1 擎的结构f 1 】 t g x 引擎系统由6 个子系统构成,分别是渲染系统、输入系统、声音系统、 网络系统、日志系统以及数学库构成。 天津大学硕士学位论文 第二章游戏引擎的总体架构 2 3 1 渲染系统 当构造一个游戏引擎的时候,通常要实现的第一件模块就是渲染系统。因 为如果看不见任何东西,就没有办法知道程序代码的工作情况。超过5 0 的c p u 处理时间花费在渲染器上面;通常也是在这个部分,游戏开发者将会受到最苛 刻的评判。 渲染系统通常是引擎中规模最大且最为复杂的子系统,t g x 引擎的渲染系 统同样是多个子系统中最复杂的一个。引擎中场景的管理方式及渲染器效率的高 低往往决定了该引擎质量的高低。渲染器包括场景管理、基本图元的渲染、纹理 的渲染、模型和动画的渲染、灯光和阴影的处理等内容。 此外,很多商用级别的游戏引擎还提供了多种渲染系统( d i r e c t x 、o p e n g l 、 g l i d e ) ,甚至是多种平台( w i n d o w s 、l i n u x 、m a c ) ,如o g r e 、t o r q u e 等,都提供 了这样的实现。由于时间和人手的问题,t g x 引擎目前没有这样多的实现,只 实现了在w i n d o w s 平台下,基于d i r e c t x 的模块。 2 3 2 输入系统 输入控制模块接受游戏中所有的输入( 鼠标、键盘、手柄、摇杆或是其他设 备) ,并把它们抽象成统一的信息进行处理。实现的功能就是负责键盘、鼠标输 入处理以及打印、存盘等输出功能的管理。一般来况,输入处理应该尽量简单, 这样可以使得程序以最小的延时得到输入信息。因为d i r e c t l n p u t 考虑了除键盘 鼠标之外的所有的输入设备,对于诸如游戏摇杆、手柄、方向盘等等这样的设备 都采用同样的代码进行基本处理,简化了硬件的多样性和兼容性问题,因为只要 输入输出硬件支持d i r e c t x ,那么它们就能被d i r e c t l n p u t 驱动。所以,出于实现 的简单性考虑,t g x 输入系统是在d i r e c t l n p u t 的基础上实现的。 2 3 3 声音系统 好的商业游戏引擎,音效一定是一个非常重要的模块。而且一个成熟的游戏 公司也一定会有专门负责音效的程序员。不过,对于小游戏或是小型游戏引擎来 说,使用d i r e e t s o u n d 或d i r e e t m u s i e 就足够了。d i r e c t x 帮开发者封装游戏引擎 的总体架构设计东西,开发者只需要学会使用就可以了。 2 3 4 网络系统 网络游戏大多采用客户服务器( c l i e n t s e r v e r ) 的体系结构,游戏的功能结 构由服务器和客户端组成,根据客户端和服务器端的不同,又可以分为以下三种 天津大学硕士学位论文第二章游戏引擎的总体架构 功能结构。对等的c l i e n t s e r v e r 、基于大厅( l o b b y ) 的网络游戏、真正的 c l i e n t s e r v e r 体系。本系统通过w i n s o c k 直接实现对于硬件的访问,而不是使用 其他的抽象层如d i r c c t x 中的d i r e c t p l a y 组件来实现。因为每加上一层抽象,传 输的内容就会更多一些,相应地就会使系统显得更慢一些。 2 3 5 数学库 数学库作为一个静态库的形式存在,因为该模块功能的实现基本都是由c 和c + + 完成的,其间有个别的地方,如求平方根等耗时严重的地方用到了汇编语 言,所以根本没有必要使用不同的a p i ,也就没有必要使用接口实现来进行统一。 本模块的功能是实现基本的三维和二维几何代数操作,在该模块中主要定义了二 维、三维矢量,变换矩阵以及它们之间的代数运算关系,这些操作主要包括矢量 之间的加、减、乘、平移、缩放、旋转运算,矩阵之间的加、减、乘和矩阵的转 置、求逆、求秩以及矩阵与矢量之间的运算,这种运算主要是用于满足矢量在不 同坐标系之间的变换,这种变换是通过矩阵与矢量的乘法操作实现的。这些基本 的几何运算是任何一个三维引擎的最基础的技术。由于我们的项目对三维实时性 要求,上面的运算操作中多数操作很少使用,最常用的就是矢量和矩阵的运算以 及矢量和坐标的平移、旋转运算。 2 3 6 日志系统 日志系统具有将数据写出到文本的能力。不能等到程序结束时才写到日志文 件中,因为如果程序崩溃了,那就会丢失所有有价值的信息。要创建的日志系统 应具备清除日志文件,用数据覆盖日志文件并在日志文件末尾添加信息的能力。 同样,它还应该具备使用可变参数链表的能力。 2 4 本章小结 本章主要介绍了t g x 引擎的架构,对于模块的划分以及各组成模块的功能 和作用也做了概要说明。 天津大学硕士学位论文第三章渲染系统 第三章渲染系统 对于复杂的系统来说,分层是一个好的简化问题的方式。与别的应用程序一 样,游戏引擎也有比较分明的层次关系。因此,在图形引擎开发初期,需要明确 它的主要构成及其层次结构。 对于最为复杂的渲染系统,仿照c 4 引擎的分层设计思路,t g x 引擎中渲染 系统的划分也基本分为几层。分层设计的好处:易于扩展、替换组件,而不需要 修改整个系统;容易跨平台,实现重用;接口和实现分开,优化工作不需要修改 其他部分的代码等等。t g x 的渲染系统采用的分层设计大体如图3 1 所示。 3 1 数学库 3 1 1 概述 图3 1 渲染系统的结构 虽然像类似d i r e c t x 的图形库都带有基本的向量,矩阵的运算a p i ,但是, 所附带的数学库比较小,一些特殊些的需求不能满足,而且如果采用图形库所附 带的数学库的话,那么引擎的灵活性就会大打折扣了。 另一方面,数学库比较难的是效率。虽然现在的硬件处理速度越来越快,但 是,同时需要处理的数据同样在迅速增加。你可以用最基本,最简单的方法实现 数学库,不过速度就不敢恭维了。为了解决这个问题,除了使用一些经典的优化 算法,比如,快速矩阵求逆,快速平方根,快速三角函数等等之外,还可以使用 更低等级的方式来进行优化处理,以提升处理速度。比如,应用c p u 提供的新 的技术来提高处理效率。当然这样会增加一些额外的工作量,需要我们根据不同 天津大学硕士学位论文 第三章渲染系统 的c p u 使用不同的处理方式。 数学库用来实现一些基本的运算。由一些类来表示,包括最为常见的向量、 矩阵及四元组,其中对于使用非常频繁的两类对象( 向量和矩阵等) ,针对不同 的c p u 处理技术,还进行了专门的优化。还有为了在场景管理模块用到的运算, 用来实现碰撞检测等功能,由射线、平面、多边形、边界框来表示。数学库的构 成更直观的表示如图3 2 所示。 图3 - 2 数学摩的构成 对于向量、矩阵等常规内容,本文不再叙述,仅对其中相对来说比较复杂一 些的内容在3 1 2 节和3 1 3 节进行了简要介绍。 3 1 2 欧拉角与四元数 欧拉角:用来描述刚体在三维欧几里得空间的方向。对于任何一个参考系, 一个刚体的取向,是依照顺序,从这参考系,做三个欧拉角的旋转而设定的。所 以,刚体的取向可以用三个基本旋转矩阵来决定。换句话说,任何关于刚体旋转 的旋转矩阵是由三个基本旋转矩阵复合而成的。 使用欧拉角的优点是占有的存储空间较小,而且方便的可以与旋转变换阵进 行相互转换。在本论文中,欧拉角被用在表示骨骼节点的相对旋转变换上。 使用欧拉角可能会出现的问题最常见的是万向节锁。使用欧拉角进行旋转实 际上是把旋转变换空间的三个元素相组合,所以它是顺序相关的,也就是说绕各 个坐标轴旋转的次序会影响最终的结果。考虑一种极端的情况,假设图形按照【a l , 9 0 ,a 3 和x y z 的顺序旋转,在绕x 轴转a l 度后,又绕y 轴旋转9 0 度,这时空 间的z 轴刚好映射到原坐标系的x 轴,原本期望绕z 轴旋转a 3 度,而实际上是 绕x 轴旋转了a 3 度。这种一个旋转轴映射到另一个旋转轴上,使得不能按照期 望的旋转轴和角度旋转物体的情况叫做万向节锁( g i m b a ll o c k ) 。万向节锁是使用 欧拉角所不能避免的,解决它的方法是使用四元数。 天津大学硕士学位论文第三章渲染系统 单位四元数,又称欧拉参数,提供另外一种方法来表述三维旋转。四元数方 法用在大多数的演算会比较快捷,概念上比较容易理解,并能避免一些技术上的 问题,如万向节锁( g i m b a ll o c k ) 现象。因为这些原因,许多实时三维图形程序 制作都使用四元数。 3 1 3 碰撞检测 在t g x 引擎的数学库中实现了a a b b 盒子和o b b 盒子。这两个盒子是场 景管理中碰撞检测时涉及到的算法。 碰撞检测的一个最基本的概念就是包容体。所谓包容体,是指用一种规则的 形状简单的“包容体把所有物体都“包裹”起来。因为游戏中的物体千差万别, 形态各异,要检测它们之间的关系实在是太困难了。而把它们用包容体“装”起 来后,包容体和包容体之间是同样的形状,检测起来比较容易,是否碰撞比较容 易判断。如果包容体之间没有碰撞的可能,则物体本身不可能能碰撞。这样就可 以省略很多需要考虑的物体,大大地提高了碰撞检测的效率。 包容球是最常见的一种包容体。它使用一个球体把三维物体包裹起来。然后 检测球体和球体之间的碰撞。显然这种方法简单但不精确。有可能球体碰撞了但 物体本身没有碰撞, 包容球虽然简单,但用球体来包容一个三维物体,其内部空间浪费比较多, 导致误判比较多。而使用立方体( 盒子) 包含三维物体,在很多情况下都要紧凑得 多。有两种基于立方体的算法,即a a b b 盒子和o b b 盒子。 a a b b 盒子,即轴对齐包容盒子( a x i s - a l i g n e db o u n d i n gb o x ,缩写为a a b b ) 是使用立方体把三维

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论