ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:1.31MB ,
资源ID:6568110      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6568110.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第1章 Delta3D概述.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第1章 Delta3D概述.docx

1、第1章 Delta3D概述第1章 Delta3D概述目录1.1 Delta3D的顶层描述:三个组件 11.2 Delta3D库的描述 41.2.1 渲染Rendering 41.2.2 物理特效Physics 51.2.3 音效Audio 51.2.4 人物动画(Character Animation) 51.2.5 脚本Scripting 61.2.6 其它功能Additional Functionality 61.3 Delta3D的内部功能模块 91.3.1 类库 91.3.2 Delta3D游戏应用程序的组成模块 91.3.3 Delta3D中的管理器(Manager) 111.3.4

2、 Delta3D中的对象工厂(Object Factory) 121.4 硬件要求 121.5 Delta3D的主页 121.6 Delta3D的安装和调试 121.6.1快速安装和使用 121.6.2 从源代码进行编译 131.6.3 运行一个实例 151.1 Delta3D的顶层描述:三个组件Delta3D是一个开源引擎,可用于3D游戏、仿真、或其他图形应用程序的开发。它的模块化设计集成了非常有名的开源项目如Open Scene Graph (OSG)、Open Dynamics Engine (ODE)、Character Animation Library (CAL3D)、OpenAL

3、、Trolltech的Qt、Crazy Eddie的GUI (CEGUI)、Xerces-C、Producer、InterSense Tracker Drivers, HawkNL、以及游戏网络引擎 Game Networking Engine (GNE). Delta3D 将以上项目用非常易于使用的API进行了整理和集成,使得使用者能直接访问其中重要的底层接口。Delta3D使用OSG和OpenGL进行渲染。Delta3D的主要目标是为所有的可视化应用提供一套单一、灵活并包括基本要素的API库。除了基本的组件外,Delta3D还提供了很多实用工具,比如STAGE(Simulation、Tra

4、ining、Game Editor的简称),SBP编译器(BSP Compiler),粒子编辑器(particle editor),一个独立的模型观察器(model viewer),一个HLA Stealth Viewer.另外,Delta3D还提供了一个与该引擎配套的强大的框架套件。这个套件包括应用基类ABC(application base classes);动态角色层DAL(Dynamic Actor Layer);信号处理的signal/slot support for direct method linking; 用于角色管理的游戏管理器GM(Game Manager);可插式的地形

5、工具,用于读取、渲染和修饰地形;用于角色通信的高端消息传递(high-level messaging)。下面介绍有关Delta3D的基本概念。而且,Delta3D提供了一套与引擎高度集成的庞大的仿真模块体系,包含用于系统初始化的基类模块(ABC),用于设置动态角色和道具的动态角色层(DAL),用于直接方法连接的信号/跟踪支持,用于控制角色的游戏管理器(GM),用于读取、渲染、产生过程化地形的插件和用于角色通信的高级消息处理器,地形数据也采用美国军用的经纬度标准,可以直接根据卫星遥测图像自动生成地形,并能根据卫星遥测图像上的色彩标准用LCC算法自动产生出各种植被并且正确的分布到地形模型上,Del

6、ta3D的地景模块采用动态装载的算法,可以支持以一个星球为单位的超大型地形数据容量,在军方需要的高精度地形仿真领域具有很高的实用价值。 更重要的是,Delta3D是一个开放源码的引擎,研发开始于2002年4月,荟萃现有最先进的系列开源软件(Open Source projects),并经过全世界所有Delta3D关注者的增补与完善,相对于购买一款价格很高又不开放源代码的引擎具有很大的优势,使用Delta3d你可以任意修改代码并且定制所有你想要的功能,这是不开放源代码的商业引擎无法做到的。 Delta3D引擎的最顶层非常简单,只是由3个主要的子系统构成,如图1.1所示:图1.1 Delta3D的

7、三个主要子系统第一个、同时也是核心子系统是“GameManager”,它负责管理角色和消息传递。GameManager(以下简称GM)在其它两个子系统间起一个通信导管(conduit)的作用。GM拥有所有的游戏角色(Game Actor)、一般角色(normal Actor)、组件和消息。特别是,GM管理所有的角色和组件以及他们之间的相互作用,是游戏程序中的核心。如果你正在使用Delta3D进行游戏的开发,则需手工将各个部分整合起来。就Delta3D本省来说,它提供了游戏开发所需的方方面面:场景管理secene management、物理特效physics、音频功能audio abilites

8、、对象的载入、动态角色库Dynamic Actor Library、环境效应environmental effects、光照lighting、地形terrain、相机camera和角色动画character animation。如何将这些功能模块进行整合,形成一个完整的游戏?这都要归功于Delta3D提供的GM机制,它提供了一个核心构架(core architecture)将游戏中的方方面面组织成一个有机的整体。GM在管理游戏方面做了三件事情。第一件,也是最重要的是,游戏消息管理。游戏消息是用于角色或组件和GM之间交流的。在系统内部的行为和状态变化也通过消息进行交流,但消息不发生消息本身。GM

9、接收并中转(route)至角色和组件的消息,以及来自角色和组件的消息。第二件是,GM维持系统中所有的角色(actor),这其中包括常规角色(regular actor)和新的游戏角色(GameActor,见下面的介绍)。GM跟踪你在代码中或地图(map,由STAGE创建)中创建的角色,并告知角色处理消息,确保角色在正确的时候进入、离开场景。第三件是,GM用来支持GMComponents(GM组件)。 从本质上说,组件是一个高层次的对象,用于处理游戏消息。你也许会说,游戏角色不就是处理游戏消息的吗?这只是说对了一半。游戏角色确实处理消息。但是,组件处于换一个更高的层次,他们处理所有诸如网络、游戏

10、规则实施、日志等所有的消息,而游戏角色只是接收它们感兴趣的特定的消息。图1.2 Delta3D的游戏管理器第二个子系统是游戏角色game actor。游戏角色是存在于模拟世界的一些主体,被设计直接与GM进行工作。通过学习角色和动态角色层(DAL)可以进一步加深对这部分概念的理解。游戏角色可以进一步分解为两个子部分:代理和角色。角色是真正的物体对象,有数据和推理(logic)。代理为游戏管理器提供了泛型的数据访问接口。在游戏开发中,我们为何要区分角色和游戏角色?常规角色或“非游戏”角色基本上是游戏世界中的静态物体,静态网格如房屋、静止的灯光、树木、地形等。游戏角色是为游戏带来生命力的东西,游戏角

11、色有诸如发怒等情绪表现,可以处理游戏消息,能与周围环境进行相互作用。 游戏角色是构建在由DAL引入的角色概念之上的,所以自然而然,游戏角色(GameActor)需要游戏角色代理(GameActorProxy)。事实上,GM只能理解代理,它是泛型的,并不能区分游戏中的坦克和玩家。第三个子系统是“组件(Components)”。组件是接受消息并进行推理(对消息进行的反应)。它们可以进行推理(perform logic),比如通过网络传递数据,或者当一个球员在比赛中得到一个touchdown时更新球员的分值。简单地说,游戏组件GMComponent是由GM管理的对象,可以用来处理和发送消息。与游戏角

12、色(GameActor)不同,游戏组件接收系统中的每一个消息,是向GM添加自定义行为的最主要方法。 既然组件接收系统中的所有消息,则组件就能知道所有角色以及发生的所有事情。你可以只是构建一个简单的组件用来侦听键盘和鼠标消息,你也可以创建复杂的组件,用于维持大量的角色。组件提供了可以拓展的架构,使得我们可以向游戏中添加行为。1.2 Delta3D库的描述1.2.1 渲染RenderingDelta3D使用openSceneGraph(OSG)进行图形渲染。OSG是一个开源、高性能的3D图形工具包,被可视化模拟、游戏、虚拟现实、科学可视化、和建模等方面的应用开发人员广泛应用,见图1。图1.3 Br

13、eakdown of rendering software usageOSG用标准C+开发并使用OpenGL作为底层渲染API。OSG支持多个图形概念,用来极大地改善性能,比如view frustum culling、occlusion culling、small feature culling、level of detail(LOD) node、state sorting、vertex arrays、以及display lists。Delta3D能使用OSG产生高复杂度的真实场景(30 FPS),见下面的图2。图1.4 Screenshot from Delta3D1.2.2 物理特效Phy

14、sics Delta3D的物理特效是由Open Dynamics Engine(ODE)库来实现的。ODE是一个模拟刚体动力学的高性能库,全功能、稳定、成熟、运行平台独立、并容易与c/c+ API结合使用。ODE能够真实模拟多个器件/物理现象,如关节(joint)、弹簧、阻尼减震器件(damping devices,比如震动吸收器)、摩擦、gears(齿轮)、motors(电机)、以及碰撞。非常高级的刚体力学可以在这些模拟的基础上构建,为游戏世界的对象提供意想不到的真实行为。ODE进行低位集成并采用基于限制的执行机构以减少开发人员创建真实行为所需的开发时间。它在车辆模拟、虚拟现实环境中的对象和

15、虚拟动物方面特别有用。1.2.3 音效AudioDelta3D的音效使用了Open Audio Library(OpenAL)。OpenAL是声音硬件的软件接口。它使用了类似OpenGL的编程风格和约定。接口包括了很多函数,使编程人员开发高质量的声音效果,特别是能得到多通道3D声音输出。所以,传统的音效概念,如panning和左/右音道,不直接支持了。OpenAL做了一些拓展,与IA-SIG 3D level 1 和 level 2传递准则(rendering guidline)兼容,这样可以处理声源的方向、和距离相关的削弱和多普勒(Doppler)效应、以及环境效应如反射、堵塞、传输和回响。

16、对程序员来说,OpenAL是一套命令,再结合控制声源如何传递到输出缓存的命令可以在三维空间内指定声源和接听者。1.2.4 人物动画(Character Animation)Delta3D使用人物动画库(Cal3D)来模拟人物,使其具有活力。Cal3D是用C+写的一个基于骨骼动画的3D人物动画库。它的一个很好的特色工具是输出器(exporter),该输出器是大多数流行3D建模工具包的插件。因此,艺术家可以使用他们偏爱的建模工具创建人物、动画、和纹理,然后将它们以Cal3D可以使用的格式输出。Cal3D C+库导入前面输出的文件,构建人物,运行动画,并访问渲染3D图形所需的数据。Cal3D能够执行

17、动画混合(blending),即允许在统一时间执行多个动画。该效果允许人物在不同动画之间平滑过渡以得到多种运动特征,比如行走和跑动。Cal3D提供一种自动层次细节LOD控制,当人物在远处时,可以通过减少人物的多边形数目改善运行性能而对真实性没有影响。同时,可以在没有预定义动画(predefined animations)的帮助下在运行时真实地创建动态运动。比如,当一个物体对象经过时,旋转人物的头,使人物一直面对运动的物体。除了Cal3D,我们也使用了另一个开源库进行人物动画。ReplicantBody是一个用C+开发的、基于Cal3D和OSG的人物动画开发包。ReplicantBody是创建和

18、控制人物的一个简单接口。1.2.5 脚本Scripting 从开发人员的角度来说,以最小的C+编程量将高级行为添加到游戏里面总是一件非常好的事情。脚本语言是做到这一点的最关键的因素之一。Delta3D使用Python脚本语言。Python是一个可移植、解释、面向对象的编程语言,从1990年发展至今。该语言的语法精美,但不过于简化,有不多的但功能强大的自带数据类型。开发人员可以添加新的模块对Python进行扩展,这些模块可以用C或C+等编译语言进行实现。这些扩展模块可以定义新的函数和变量以及新对象类型。Python包括类、一整套字符串操作、自动内存管理/垃圾回收、以及异常处理等。 已经开发了大量

19、的Python扩展模块。其中一些已经作为标准库的一部分了,可以在所有Python程序中使用(比如,数学库和regular expressions),所以这些模块也可以在Delta3D中使用。另外,Delta3D通过C+代码与Python有完全的连接,使得应用程序开发人员能够非常容易链接Python和C+代码。1.2.6 其它功能Additional Functionality 另外,还没有开源项目能满足下面的特色要求,所以赞助商资助了相应的开发:图形的关卡编辑器、高级地形/植物渲染方面、高级的环境特色、粒子系统编辑器、记录和回放功能、3D模型观察器。包含在Delta3D中最重要的项目(item

20、)之一是关卡编辑器。关卡编辑器,由Delta3D在Allion Science Technology的BMH开发团队开发,是开发人员用图形方式构建高级关卡的非常好用的工具。关卡编辑器能输入所有的OSG支持的模型类型,开发人员能将这些模型安放在世界之中,使它们移动,插入(insert triggers,and incorporate game logic)。像这样的关卡编辑器对所有的专业游戏引擎来说都是非常关键的。能使专业的和业余的开发人员构建Delta3D应用程序的高级关卡。图4展示了一个在用的关卡编辑器界面截图。Delta3D能用于渲染非常逼真的地形,在某些方面要优于当前游戏和飞行模拟器中使

21、用的地形模型。Delta3D使用GENETICS地形和植物引擎。该引擎由William Wells(在MOVES的一位空军攻读博士的学生)开发。Wells的方法提高了给定地形高程数据和表面图像数据的质量。Delta3D为传统飞行模拟器的大型地面提供了高性能渲染。 Delta3D的另一个高级特色是我们处理环境特色,比如天空、云层等,的方法。遵循尽量简单的要求,在建立Delta3D时我们已经将其中的环境特色作为尽量高端的技术手段。与很多引擎一样,Delta3D能使用天空盒来模拟天空的真实性。但是,开发人员受应用到天空盒的静止纹理的限制,不能改变天气条件或者日期(time of day)。Delta

22、3D可以克服这一点限制。通过使用天穹(sky dome)、自带的星历计算、和高端天气控制,开发人员可以仅仅输入时间和天气条件(晴朗clear、局部阴partially cloudy、多云overcast、等等),Delta3D便可以产生云层并设定太阳进行匹配。另一个环境特色就是程序设计的云层(procedural clouds)。许多3D游戏和模拟程序的一个问题是,虽然它们的天空第一眼看起来非常真实,但是观察一段时间后用户开始注意到这个天空不是真的,它不动!为克服这个缺点,Delta3D引入了两个云层模型,一个是3D的,一个平面的,它们都可以随时间改变。Delta3D还有一个特色工具,粒子系统

23、编辑器(graphical particle system editor)。该编辑器允许开发人员使用图形工具改变粒子系统的属性并查看改变的实时效果。这样可以避免运行实际应用程序来看效果,从而极大地加快了开发进程。另外两个Delta3D有,而其它很多引擎没有的特色是,3D模型查看器(model viewer)和记录回放场景。模型查看器设计用来运行开发人员快速载入模型并从多角度进行观察,没有必要编写程序来做这项工作。记录和回放功能源于Delta3D作为训练和教育应用开发引擎的最初设计。该功能允许指导人员和接受训练的人员回到场景的某个特定时刻,并讨论发生了什么、受训人员做了什么、本应该怎么做。图 1

24、.5. Delta3D level editor 图1.61.3 Delta3D的内部功能模块1.3.1 类库主要含有:dtCore:包含通用基本功能。dtChar:包含动画融合(Animation blending),角色步长与场景协调(Avatar feet correspond to world positioning)等功能。dtABC:高级程序基本类模块,对于某些应用程序的开发很有用处的。dtHLA:HLA网络模块的界面,实现坐标系统转换等功能。dtTerrain:提供执行地形载入,渲染,装饰的插件体系框架。dtDAL:动态角色层模块提供一个生成、访问、控制角色的底层支持。dtGUI

25、:包含Crazy Eddies GUI的简捷界面。dtGame:提供一个建立复杂的游戏,训练软件的体系。dtUtil:贯穿整个Delta3D的基本应用组件。dtBSP:将载入文件自动优化为BSP格式的组件。dtAudio:提供高级的音频处理函数库。dtNet:提供多用户网络操作的高级API函数库。1.3.2 Delta3D游戏应用程序的组成模块一个3D游戏系统的基本组成如下:从上图可以看出, Scene和View在整个系统中处于核心地位。图中的箭头指向表示箭头所指的某个类中包含了箭尾的类,比如,在dtGame:GM中包含了一个dtCore:Scene,所以箭头由dtCore:Scene指向dt

26、Game:GM。在这个图中,有几个非常重要的概念要弄清楚(相关更详细的内容参见有关专门的章节):(1)View,称为“视景”,是游戏中某个相机观察到的场景(Scene)的某个特定部分。因为场景中可以有多个相机,所以对应场景可以有多个View,在Delta3D中dtCore:Scene类中有一个View链表,在dtABC:Application中也有一个View链表。在Delta3D中由dtCore:View描述。(2)Scene,称为“场景”,是游戏中的三维世界,包含了所有的可绘制体,在Delta3D中用dtCore:Scene类进行描述。游戏应用程序Application中只能维持一个Sce

27、ne,当然该Scene随着导入的Map而变动其三维对象。(3)Actor,称为“角色”,游戏世界中所有的对象都可以称为Actor,比如静止的房屋、树木,运动的人物、车辆等。Actor分为regular Actor(Non game Actor)和game Actor,前者用于描述游戏中的静态对象,后者用于描述游戏中具有消息通信的游戏对象。Actor是对虚拟世界对象的抽象描述,所以Actor都包含在GM中,由GM实现actor的管理。在GM中定义了如下的成员:mGameActorProxyMap和mActorProxyMap,它们的类型分别为:std:mapdtCore:UniqueId,dtC

28、ore:RefPtr std:mapdtCore:UniqueId,dtCore:RefPtr (4)Map,称为“地图”, 这里所说的地图不是常规意义下的平面地图或三维地图。Map表示了游戏对象的逻辑组织结构,以及与相关游戏资源的某种映射关系。所以,可以通过Map获取游戏对象。要注意Map与Scene之间的区别。Map和Scene都描述了游戏世界的三维对象,但Map侧重的是三维对象的逻辑关系,而Scene是三维对象的实际空间组织;另一方面,Map只是知道STAGE中包含的对象(通过所谓的角色代理),而Scene包括了所创建的所有对象,也就是说,Map可能只是包含了Scene中的某些对象,不一

29、定是Scene的全部。Map由STAGE制作并生成。(5)Project,称为“项目”,将游戏中的地图(即上面所说的Map)和它们的资源整合在一起。一个游戏应用程序有且只有一个Project。在Delta3D中用dtDAL:Project类进行描述,该类是任何与地图数据相关的类的基础,它持有其路径下的一个或多个地图集。一个项目实际上是一个根文件夹,在该文件夹中存有纹理、网格、声音和地图等文件。Project实现了对Map的管理,包括创建、保存、删除、关闭和打开Map,以及将Map导入场景中,等等。(6)GM,全称Game Manager,称为“游戏管理器”。一个游戏应用程序中有且只有一个GM,

30、而GM只能有一个Application,并管理之。GM只是跟游戏消息、角色和组件打交道,而在Delta3D中我们可以根据开发项目的实际需求,利用相应的库类派生,自定义消息、角色和组件,比如涉及到游戏的输入时,我们可以从dtGame:BaseInputComponent类派生一个自定义输入类来处理键盘和鼠标的输入,并按一定的优先级别将该组件添加到GM中。所以必须熟练掌握消息、角色和组件的概念和相关库类。1.3.3 Delta3D中的管理器(Manager)(a)Game Manager(游戏管理器:GM)GM实现游戏消息、角色和组件的管理,包括查找、删除和添加等。定义在dtGame类库的game

31、manager.h文件中(b)Game Event Manager(游戏事件管理器)该管理器实现游戏事件的管理,包括查找、删除和添加等。定义在dtDAL类库的gameeventmanager.h文件中。dtDAL:Map类中包含了一个与之紧密相关的游戏事件管理器,该游戏事件管理器保存了Map中的所有游戏事件,在导入的每个地图中游戏事件管理器允许我们从任何地方查找游戏事件: dtCore:RefPtr mFired; mFired=dtDAL:GameEventManager:GetInstance().FindEvent(fired);游戏事件是在STAGE中添加的,随着地图的导入一起添加到游

32、戏中。上面的代码表示在游戏中查找名为“fired”的游戏事件,每个游戏事件都有一个唯一的名称。(c)游戏状态管理器(state manager)(d)library Manager(库管理器) This class is the main class in the dynamic actor library portion of the DAL (Dynamic Actor Layer). It has a list of the dynamic libraries that are registered with the Manager as well as a list of the ActorTypes that each library can create. It is also the main vehicle for creating a new ActorPr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1