第1章 Delta3D概述.docx

上传人:b****6 文档编号:6568110 上传时间:2023-01-08 格式:DOCX 页数:17 大小:1.31MB
下载 相关 举报
第1章 Delta3D概述.docx_第1页
第1页 / 共17页
第1章 Delta3D概述.docx_第2页
第2页 / 共17页
第1章 Delta3D概述.docx_第3页
第3页 / 共17页
第1章 Delta3D概述.docx_第4页
第4页 / 共17页
第1章 Delta3D概述.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

第1章 Delta3D概述.docx

《第1章 Delta3D概述.docx》由会员分享,可在线阅读,更多相关《第1章 Delta3D概述.docx(17页珍藏版)》请在冰豆网上搜索。

第1章 Delta3D概述.docx

第1章Delta3D概述

第1章Delta3D概述

目录

1.1Delta3D的顶层描述:

三个组件1

1.2Delta3D库的描述4

1.2.1渲染Rendering4

1.2.2物理特效Physics5

1.2.3音效Audio5

1.2.4人物动画(CharacterAnimation)5

1.2.5脚本Scripting6

1.2.6其它功能AdditionalFunctionality6

1.3Delta3D的内部功能模块9

1.3.1类库9

1.3.2Delta3D游戏应用程序的组成模块9

1.3.3Delta3D中的管理器(Manager)11

1.3.4Delta3D中的对象工厂(ObjectFactory)12

1.4硬件要求12

1.5Delta3D的主页12

1.6Delta3D的安装和调试12

1.6.1快速安装和使用12

1.6.2从源代码进行编译13

1.6.3运行一个实例15

1.1Delta3D的顶层描述:

三个组件

Delta3D是一个开源引擎,可用于3D游戏、仿真、或其他图形应用程序的开发。

它的模块化设计集成了非常有名的开源项目如OpenSceneGraph(OSG)、OpenDynamicsEngine(ODE)、CharacterAnimationLibrary(CAL3D)、OpenAL、Trolltech的Qt、CrazyEddie的GUI(CEGUI)、Xerces-C、Producer、InterSenseTrackerDrivers,HawkNL、以及游戏网络引擎GameNetworkingEngine(GNE).Delta3D将以上项目用非常易于使用的API进行了整理和集成,使得使用者能直接访问其中重要的底层接口。

Delta3D使用OSG和OpenGL进行渲染。

Delta3D的主要目标是为所有的可视化应用提供一套单一、灵活并包括基本要素的API库。

除了基本的组件外,Delta3D还提供了很多实用工具,比如STAGE(Simulation、Training、GameEditor的简称),SBP编译器(BSPCompiler),粒子编辑器(particleeditor),一个独立的模型观察器(modelviewer),一个HLAStealthViewer.另外,Delta3D还提供了一个与该引擎配套的强大的框架套件。

这个套件包括应用基类ABC(applicationbaseclasses);动态角色层DAL(DynamicActorLayer);信号处理的signal/slotsupportfordirectmethodlinking;用于角色管理的游戏管理器GM(GameManager);可插式的地形工具,用于读取、渲染和修饰地形;用于角色通信的高端消息传递(high-levelmessaging)。

下面介绍有关Delta3D的基本概念。

而且,Delta3D提供了一套与引擎高度集成的庞大的仿真模块体系,包含用于系统初始化的基类模块(ABC),用于设置动态角色和道具的动态角色层(DAL),用于直接方法连接的信号/跟踪支持,用于控制角色的游戏管理器(GM),用于读取、渲染、产生过程化地形的插件和用于角色通信的高级消息处理器,地形数据也采用美国军用的经纬度标准,可以直接根据卫星遥测图像自动生成地形,并能根据卫星遥测图像上的色彩标准用LCC算法自动产生出各种植被并且正确的分布到地形模型上,Delta3D的地景模块采用动态装载的算法,可以支持以一个星球为单位的超大型地形数据容量,在军方需要的高精度地形仿真领域具有很高的实用价值。

   更重要的是,Delta3D是一个开放源码的引擎,研发开始于2002年4月,荟萃现有最先进的系列开源软件(OpenSourceprojects),并经过全世界所有Delta3D关注者的增补与完善,相对于购买一款价格很高又不开放源代码的引擎具有很大的优势,使用Delta3d你可以任意修改代码并且定制所有你想要的功能,这是不开放源代码的商业引擎无法做到的。

Delta3D引擎的最顶层非常简单,只是由3个主要的子系统构成,如图1.1所示:

图1.1Delta3D的三个主要子系统

第一个、同时也是核心子系统是“GameManager”,它负责管理角色和消息传递。

GameManager(以下简称GM)在其它两个子系统间起一个通信导管(conduit)的作用。

GM拥有所有的游戏角色(GameActor)、一般角色(normalActor)、组件和消息。

特别是,GM管理所有的角色和组件以及他们之间的相互作用,是游戏程序中的核心。

如果你正在使用Delta3D进行游戏的开发,则需手工将各个部分整合起来。

就Delta3D本省来说,它提供了游戏开发所需的方方面面:

场景管理secenemanagement、物理特效physics、音频功能audioabilites、对象的载入、动态角色库DynamicActorLibrary、环境效应environmentaleffects、光照lighting、地形terrain、相机camera和角色动画characteranimation。

如何将这些功能模块进行整合,形成一个完整的游戏?

这都要归功于Delta3D提供的GM机制,它提供了一个核心构架(corearchitecture)将游戏中的方方面面组织成一个有机的整体。

GM在管理游戏方面做了三件事情。

第一件,也是最重要的是,游戏消息管理。

游戏消息是用于角色或组件和GM之间交流的。

在系统内部的行为和状态变化也通过消息进行交流,但消息不发生消息本身。

GM接收并中转(route)至角色和组件的消息,以及来自角色和组件的消息。

第二件是,GM维持系统中所有的角色(actor),这其中包括常规角色(regularactor)和新的游戏角色(GameActor,见下面的介绍)。

GM跟踪你在代码中或地图(map,由STAGE创建)中创建的角色,并告知角色处理消息,确保角色在正确的时候进入、离开场景。

第三件是,GM用来支持GMComponents(GM组件)。

从本质上说,组件是一个高层次的对象,用于处理游戏消息。

你也许会说,游戏角色不就是处理游戏消息的吗?

这只是说对了一半。

游戏角色确实处理消息。

但是,组件处于换一个更高的层次,他们处理所有诸如网络、游戏规则实施、日志等所有的消息,而游戏角色只是接收它们感兴趣的特定的消息。

图1.2Delta3D的游戏管理器

第二个子系统是游戏角色gameactor。

游戏角色是存在于模拟世界的一些主体,被设计直接与GM进行工作。

通过学习角色和动态角色层(DAL)可以进一步加深对这部分概念的理解。

游戏角色可以进一步分解为两个子部分:

代理和角色。

角色是真正的物体对象,有数据和推理(logic)。

代理为游戏管理器提供了泛型的数据访问接口。

在游戏开发中,我们为何要区分角色和游戏角色?

常规角色或“非游戏”角色基本上是游戏世界中的静态物体,静态网格如房屋、静止的灯光、树木、地形等。

游戏角色是为游戏带来生命力的东西,游戏角色有诸如发怒等情绪表现,可以处理游戏消息,能与周围环境进行相互作用。

游戏角色是构建在由DAL引入的角色概念之上的,所以自然而然,游戏角色(GameActor)需要游戏角色代理(GameActorProxy)。

事实上,GM只能理解代理,它是泛型的,并不能区分游戏中的坦克和玩家。

第三个子系统是“组件(Components)”。

组件是接受消息并进行推理(对消息进行的反应)。

它们可以进行推理(performlogic),比如通过网络传递数据,或者当一个球员在比赛中得到一个touchdown时更新球员的分值。

简单地说,游戏组件GMComponent是由GM管理的对象,可以用来处理和发送消息。

与游戏角色(GameActor)不同,游戏组件接收系统中的每一个消息,是向GM添加自定义行为的最主要方法。

既然组件接收系统中的所有消息,则组件就能知道所有角色以及发生的所有事情。

你可以只是构建一个简单的组件用来侦听键盘和鼠标消息,你也可以创建复杂的组件,用于维持大量的角色。

组件提供了可以拓展的架构,使得我们可以向游戏中添加行为。

1.2Delta3D库的描述

1.2.1渲染Rendering

Delta3D使用openSceneGraph(OSG)进行图形渲染。

OSG是一个开源、高性能的3D图形工具包,被可视化模拟、游戏、虚拟现实、科学可视化、和建模等方面的应用开发人员广泛应用,见图1。

图1.3Breakdownofrenderingsoftwareusage

OSG用标准C++开发并使用OpenGL作为底层渲染API。

OSG支持多个图形概念,用来极大地改善性能,比如viewfrustumculling、occlusionculling、smallfeatureculling、levelofdetail(LOD)node、statesorting、vertexarrays、以及displaylists。

Delta3D能使用OSG产生高复杂度的真实场景(30FPS),见下面的图2。

图1.4ScreenshotfromDelta3D

1.2.2物理特效Physics

Delta3D的物理特效是由OpenDynamicsEngine(ODE)库来实现的。

ODE是一个模拟刚体动力学的高性能库,全功能、稳定、成熟、运行平台独立、并容易与c/c++API结合使用。

ODE能够真实模拟多个器件/物理现象,如关节(joint)、弹簧、阻尼减震器件(dampingdevices,比如震动吸收器)、摩擦、gears(齿轮)、motors(电机)、以及碰撞。

非常高级的刚体力学可以在这些模拟的基础上构建,为游戏世界的对象提供意想不到的真实行为。

ODE进行低位集成并采用基于限制的执行机构以减少开发人员创建真实行为所需的开发时间。

它在车辆模拟、虚拟现实环境中的对象和虚拟动物方面特别有用。

1.2.3音效Audio

Delta3D的音效使用了OpenAudioLibrary(OpenAL)。

OpenAL是声音硬件的软件接口。

它使用了类似OpenGL的编程风格和约定。

接口包括了很多函数,使编程人员开发高质量的声音效果,特别是能得到多通道3D声音输出。

所以,传统的音效概念,如panning和左/右音道,不直接支持了。

OpenAL做了一些拓展,与IA-SIG3Dlevel1和level2传递准则(renderingguidline)兼容,这样可以处理声源的方向、和距离相关的削弱和多普勒(Doppler)效应、以及环境效应如反射、堵塞、传输和回响。

对程序员来说,OpenAL是一套命令,再结合控制声源如何传递到输出缓存的命令可以在三维空间内指定声源和接听者。

1.2.4人物动画(CharacterAnimation)

Delta3D使用人物动画库(Cal3D)来模拟人物,使其具有活力。

Cal3D是用C++写的一个基于骨骼动画的3D人物动画库。

它的一个很好的特色工具是输出器(exporter),该输出器是大多数流行3D建模工具包的插件。

因此,艺术家可以使用他们偏爱的建模工具创建人物、动画、和纹理,然后将它们以Cal3D可以使用的格式输出。

Cal3DC++库导入前面输出的文件,构建人物,运行动画,并访问渲染3D图形所需的数据。

Cal3D能够执行动画混合(blending),即允许在统一时间执行多个动画。

该效果允许人物在不同动画之间平滑过渡以得到多种运动特征,比如行走和跑动。

Cal3D提供一种自动层次细节LOD控制,当人物在远处时,可以通过减少人物的多边形数目改善运行性能而对真实性没有影响。

同时,可以在没有预定义动画(predefinedanimations)的帮助下在运行时真实地创建动态运动。

比如,当一个物体对象经过时,旋转人物的头,使人物一直面对运动的物体。

除了Cal3D,我们也使用了另一个开源库进行人物动画。

ReplicantBody是一个用C++开发的、基于Cal3D和OSG的人物动画开发包。

ReplicantBody是创建和控制人物的一个简单接口。

1.2.5脚本Scripting

从开发人员的角度来说,以最小的C++编程量将高级行为添加到游戏里面总是一件非常好的事情。

脚本语言是做到这一点的最关键的因素之一。

Delta3D使用Python脚本语言。

Python是一个可移植、解释、面向对象的编程语言,从1990年发展至今。

该语言的语法精美,但不过于简化,有不多的但功能强大的自带数据类型。

开发人员可以添加新的模块对Python进行扩展,这些模块可以用C或C++等编译语言进行实现。

这些扩展模块可以定义新的函数和变量以及新对象类型。

Python包括类、一整套字符串操作、自动内存管理/垃圾回收、以及异常处理等。

已经开发了大量的Python扩展模块。

其中一些已经作为标准库的一部分了,可以在所有Python程序中使用(比如,数学库和regularexpressions),所以这些模块也可以在Delta3D中使用。

另外,Delta3D通过C++代码与Python有完全的连接,使得应用程序开发人员能够非常容易链接Python和C++代码。

1.2.6其它功能AdditionalFunctionality

另外,还没有开源项目能满足下面的特色要求,所以赞助商资助了相应的开发:

图形的关卡编辑器、高级地形/植物渲染方面、高级的环境特色、粒子系统编辑器、记录和回放功能、3D模型观察器。

包含在Delta3D中最重要的项目(item)之一是关卡编辑器。

关卡编辑器,由Delta3D在AllionScience&

Technology的BMH开发团队开发,是开发人员用图形方式构建高级关卡的非常好用的工具。

关卡编辑器能输入所有的OSG支持的模型类型,开发人员能将这些模型安放在世界之中,使它们移动,插入(inserttriggers,andincorporategamelogic)。

像这样的关卡编辑器对所有的专业游戏引擎来说都是非常关键的。

能使专业的和业余的开发人员构建Delta3D应用程序的高级关卡。

图4展示了一个在用的关卡编辑器界面截图。

Delta3D能用于渲染非常逼真的地形,在某些方面要优于当前游戏和飞行模拟器中使用的地形模型。

Delta3D使用GENETICS地形和植物引擎。

该引擎由WilliamWells(在MOVES的一位空军攻读博士的学生)开发。

Wells的方法提高了给定地形高程数据和表面图像数据的质量。

Delta3D为传统飞行模拟器的大型地面提供了高性能渲染。

Delta3D的另一个高级特色是我们处理环境特色,比如天空、云层等,的方法。

遵循尽量简单的要求,在建立Delta3D时我们已经将其中的环境特色作为尽量高端的技术手段。

与很多引擎一样,Delta3D能使用天空盒来模拟天空的真实性。

但是,开发人员受应用到天空盒的静止纹理的限制,不能改变天气条件或者日期(timeofday)。

Delta3D可以克服这一点限制。

通过使用天穹(skydome)、自带的星历计算、和高端天气控制,开发人员可以仅仅输入时间和天气条件(晴朗clear、局部阴partiallycloudy、多云overcast、等等),Delta3D便可以产生云层并设定太阳进行匹配。

另一个环境特色就是程序设计的云层(proceduralclouds)。

许多3D游戏和模拟程序的一个问题是,虽然它们的天空第一眼看起来非常真实,但是观察一段时间后用户开始注意到这个天空不是真的,它不动!

为克服这个缺点,Delta3D引入了两个云层模型,一个是3D的,一个平面的,它们都可以随时间改变。

Delta3D还有一个特色工具,粒子系统编辑器(graphicalparticlesystemeditor)。

该编辑器允许开发人员使用图形工具改变粒子系统的属性并查看改变的实时效果。

这样可以避免运行实际应用程序来看效果,从而极大地加快了开发进程。

另外两个Delta3D有,而其它很多引擎没有的特色是,3D模型查看器(modelviewer)和记录回放场景。

模型查看器设计用来运行开发人员快速载入模型并从多角度进行观察,没有必要编写程序来做这项工作。

记录和回放功能源于Delta3D作为训练和教育应用开发引擎的最初设计。

该功能允许指导人员和接受训练的人员回到场景的某个特定时刻,并讨论发生了什么、受训人员做了什么、本应该怎么做。

图1.5.Delta3Dleveleditor

图1.6

1.3Delta3D的内部功能模块

1.3.1类库

主要含有:

dtCore:

包含通用基本功能。

dtChar:

包含动画融合(Animationblending),角色步长与场景协调(Avatarfeet

correspondtoworldpositioning)等功能。

dtABC:

高级程序基本类模块,对于某些应用程序的开发很有用处的。

dtHLA:

HLA网络模块的界面,实现坐标系统转换等功能。

dtTerrain:

提供执行地形载入,渲染,装饰的插件体系框架。

dtDAL:

动态角色层模块提供一个生成、访问、控制角色的底层支持。

dtGUI:

包含CrazyEddie'sGUI的简捷界面。

dtGame:

提供一个建立复杂的游戏,训练软件的体系。

dtUtil:

贯穿整个Delta3D的基本应用组件。

dtBSP:

将载入文件自动优化为BSP格式的组件。

dtAudio:

提供高级的音频处理函数库。

dtNet:

提供多用户网络操作的高级API函数库。

1.3.2Delta3D游戏应用程序的组成模块

一个3D游戏系统的基本组成如下:

从上图可以看出,Scene和View在整个系统中处于核心地位。

图中的箭头指向表示箭头所指的某个类中包含了箭尾的类,比如,在dtGame:

:

GM中包含了一个dtCore:

:

Scene,所以箭头由dtCore:

:

Scene指向dtGame:

:

GM。

在这个图中,有几个非常重要的概念要弄清楚(相关更详细的内容参见有关专门的章节):

(1)View,称为“视景”,是游戏中某个相机观察到的场景(Scene)的某个特定部分。

因为场景中可以有多个相机,所以对应场景可以有多个View,在Delta3D中dtCore:

:

Scene类中有一个View链表,在dtABC:

:

Application中也有一个View链表。

在Delta3D中由dtCore:

:

View描述。

(2)Scene,称为“场景”,是游戏中的三维世界,包含了所有的可绘制体,在Delta3D中用dtCore:

:

Scene类进行描述。

游戏应用程序Application中只能维持一个Scene,当然该Scene随着导入的Map而变动其三维对象。

(3)Actor,称为“角色”,游戏世界中所有的对象都可以称为Actor,比如静止的房屋、树木,运动的人物、车辆等。

Actor分为regularActor(NongameActor)和gameActor,前者用于描述游戏中的静态对象,后者用于描述游戏中具有消息通信的游戏对象。

Actor是对虚拟世界对象的抽象描述,所以Actor都包含在GM中,由GM实现actor的管理。

在GM中定义了如下的成员:

mGameActorProxyMap和mActorProxyMap,它们的类型分别为:

std:

:

map

:

UniqueId,dtCore:

:

RefPtr>

std:

:

map

:

UniqueId,dtCore:

:

RefPtr>

(4)Map,称为“地图”,这里所说的地图不是常规意义下的平面地图或三维地图。

Map表示了游戏对象的逻辑组织结构,以及与相关游戏资源的某种映射关系。

所以,可以通过Map获取游戏对象。

要注意Map与Scene之间的区别。

Map和Scene都描述了游戏世界的三维对象,但Map侧重的是三维对象的逻辑关系,而Scene是三维对象的实际空间组织;另一方面,Map只是知道STAGE中包含的对象(通过所谓的角色代理),而Scene包括了所创建的所有对象,也就是说,Map可能只是包含了Scene中的某些对象,不一定是Scene的全部。

Map由STAGE制作并生成。

(5)Project,称为“项目”,将游戏中的地图(即上面所说的Map)和它们的资源整合在一起。

一个游戏应用程序有且只有一个Project。

在Delta3D中用dtDAL:

:

Project类进行描述,该类是任何与地图数据相关的类的基础,它持有其路径下的一个或多个地图集。

一个项目实际上是一个根文件夹,在该文件夹中存有纹理、网格、声音和地图等文件。

Project实现了对Map的管理,包括创建、保存、删除、关闭和打开Map,以及将Map导入场景中,等等。

(6)GM,全称GameManager,称为“游戏管理器”。

一个游戏应用程序中有且只有一个GM,而GM只能有一个Application,并管理之。

GM只是跟游戏消息、角色和组件打交道,而在Delta3D中我们可以根据开发项目的实际需求,利用相应的库类派生,自定义消息、角色和组件,比如涉及到游戏的输入时,我们可以从dtGame:

:

BaseInputComponent类派生一个自定义输入类来处理键盘和鼠标的输入,并按一定的优先级别将该组件添加到GM中。

所以必须熟练掌握消息、角色和组件的概念和相关库类。

1.3.3Delta3D中的管理器(Manager)

(a)GameManager(游戏管理器:

GM)

GM实现游戏消息、角色和组件的管理,包括查找、删除和添加等。

定义在dtGame类库的gamemanager.h文件中

(b)GameEventManager(游戏事件管理器)

该管理器实现游戏事件的管理,包括查找、删除和添加等。

定义在dtDAL类库的gameeventmanager.h文件中。

dtDAL:

:

Map类中包含了一个与之紧密相关的游戏事件管理器,该游戏事件管理器保存了Map中的所有游戏事件,在导入的每个地图中游戏事件管理器允许我们从任何地方查找游戏事件:

dtCore:

:

RefPtr

:

GameEvent>mFired;

mFired=dtDAL:

:

GameEventManager:

:

GetInstance().FindEvent("fired");

游戏事件是在STAGE中添加的,随着地图的导入一起添加到游戏中。

上面的代码表示在游戏中查找名为“fired”的游戏事件,每个游戏事件都有一个唯一的名称。

(c)游戏状态管理器(statemanager)

(d)libraryManager(库管理器)

ThisclassisthemainclassinthedynamicactorlibraryportionoftheDAL(DynamicActorLayer).IthasalistofthedynamiclibrariesthatareregisteredwiththeManageraswellasalistoftheActorTypesthateachlibrarycancreate.ItisalsothemainvehicleforcreatinganewActorPr

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育

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

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