irrlicht是跨平台,支持多种图形库的开源3d引擎。irrlicht的设计很好的体现了接口和实现分离的原则,整个框架设计精巧清晰,是学习3d引擎设计的不错的教材。
先看下名字空间的划分,可以看到irr具有非常清晰的结构:
irr
|
Everything in the Irrlicht Engine can be found in this
namespace |
irr::core
|
In this namespace can be found basic classes like vectors,
planes, arrays, lists and so on |
irr::gui
|
The gui
namespace contains useful classes for
easy creation of a graphical user interface |
irr::io
|
|
irr::scene
|
|
irr::scene::quake3
|
|
irr::video
|
The video
namespace contains classes for
accessing the video
driver. All 2d and 3d rendering is
done here |
irr空间中提供了引擎的一些底层构架的支持,如事件处理系统,操作系统抽象,引用计数,设备抽象等。
irr::core空间中提供了基础的数学和数据结构构件,如向量,矩阵,四元数,列表,数组,红黑树等。
irr::io空间提供了io操作的构件并提供对象属性序列化和xml支持。
irr::video空间包含了3d图形功能接口和构件。如对图形驱动,材质渲染的抽象。
irr::scene空间包含了基于scene graph的3d引擎渲染和管理,并提供了camera,骨骼动画,粒子系统等的丰富支持。
irr::gui空间包含了irrlicht的GUI模块,同样也是基于接口的设计。
我
想重点剖析的是irr::video和irr::scene,这是3d引擎的核心部分,目的是分析irrlicht是如何将不同的图形API进行抽象的,
以及如何使用scene
graph-material体系进行引擎的运转,并将各种3d技术融入到这个体系中的。另外irr如何做到跨平台支持的也会进行剖析。
作为引擎的概览,首先看下文档中的short example:
IrrlichtDevice *device = createDevice
(video::EDT_DIRECT3D8
,
core::dimension2d(640,480));
video::IVideoDriver* driver = device->getVideoDriver();
scene::ISceneManager* scenemgr = device->getSceneManager();
这三句代码显示了irrlicht最基本的三个对象-设备,图形驱动和场景管理器。简单看来,通过全局函数createDevice根据指定的驱动类型创建一个设备,之后可通过设备对象得到驱动对象以及场景管理器对象。
device->setWindowCaption(L"Hello World!"
);
设备对象具有一些设备相关的能力,比如这儿可以设置窗口标题。
scene::ISceneNode* node=scenemgr->addAnimatedMeshSceneNode(scenemgr->getMesh("quake2model.md2"
));
if
(node)
{
node->setMaterialTexture(0, driver->getTexture("texture.bmp"
));
node->setMaterialFlag(video::EMF_LIGHTING
, false
);
}
scenemgr->addCameraSceneNodeFPS();
这几行代码显示了scene
graph体系,ISceneNode是irrlicht场景中基础组成部分节点的抽象,这儿添加了一个动画mesh节点,和一个camera节点。节点
具有材质属性(当然camera并不需要材质,但是ISceneNode作为一个抽象要尽量兼顾各种节点,为了让接口的层次简单些,这样做也是一个实用的
方法)
while
(device->run() && driver)
{
driver->beginScene(true
, true
, video::SColor(255,0,0,255));
scenemgr->drawAll();
driver->endScene();
}
这几行是引擎运转的过程,首先引擎运转的条件是设备仍然在运转:device->run(),可通过closeDevice关闭设备。
scenemgr->drawAll()执行了所有节点的渲染,节点的渲染不仅仅是draw,节点的transform计算,动画计算(包括骨骼动
画),camera这种特殊节点的操作(特殊的节点还有光源等),都包含在渲染的范畴中,在drawAll中统一调用,各种节点实现各自的渲染,最终由
scenemgr统一管理(如排序)绘制,这正是基于scene graph架构的引擎的特点之一。
device->drop();
这一句体现了irrlicht的引用计数机制,通过grab,drop管理对象引用次数。这儿如果一切正常应该是引用drop为0,device销毁自己,退出程序。
从
这个很短的例子可以看到irrlicht的基本构件和运行过程。irrlicht提供了scene的管理机制,并提供了大量预定义好的scene
nodes,实现了很多的功能,这样你就可以很方便的使用引擎。并且这种机制的好处是,节点可以不断的扩展,并可以在以后的项目中复用。
当然,irrlicht引擎不是完美的,我准备在这个源码剖析的系列的最后,分析一下irrlicht的一些具体问题和不足,当然作为一个开源引擎,irrlicht已经非常好了,我的主要目的正是通过分析学习irrlicht给自己设计3d引擎打一个基础。
分享到:
相关推荐
鬼火引擎源码(irrlicht-1.8.4) 是一个游戏引擎源码,欢迎各位下载学习。以前定价太高了,现在就当作福利送给大家吧。
irrlicht-1.7.1 引擎源码是一个开源的3D图形引擎,专为游戏开发和其他实时3D应用而设计。这个源码库包含了实现高性能3D渲染、物理模拟、输入处理以及各种资源管理的功能。以下是关于irrlicht-1.7.1引擎的一些关键...
irrlicht1.6的帮助手册-英文的帮助手册可惜没有中文的!
irrlicht 1.3版本的源码包中,你将找到包括库文件、头文件、示例程序、文档以及可能的编译工具,这些资源可以帮助你深入理解引擎的工作原理,并且快速开始自己的3D项目开发。通过研究这些源码,你可以学习到如何创建...
irrlicht-1.7.2.zip irrlicht引擎是一个开源的3D图形引擎,由德国开发者Mario Kicherer创建,其名称"irrlicht"在德语中意为"鬼火",象征着它在3D世界中点亮光明。这个引擎以C++编写,支持多种操作系统,包括...
2. **源码准备**:获取Irrlicht引擎的源代码,根据Android平台的需求进行必要的修改和调整。 3. **编译命令**:使用NDK的交叉编译工具链,如`ndk-build`或CMake,执行编译命令,生成适用于Android平台的.so文件。 4....
游戏开发初学者可以看看,全中文注释irrlicht-1.6引擎的第一个例子,后面的的例子正在翻译,敬请期待!
在irrlicht-1.5版本中,可能包含以下内容: - 源代码:所有irrlicht引擎的源代码,供开发者研究和定制。 - 文档:包括API参考手册、用户指南和开发日志,帮助开发者了解引擎的使用方法和开发过程。 - 示例项目:...
irrlicht-1.8 是鬼火引擎(Irrlicht Engine)的一个重要版本更新。鬼火引擎,也称为 irrlicht,是一款流行的开源3D图形引擎,主要用于游戏开发和其他实时3D应用。这款引擎以其易用性、高效性能以及跨平台支持而受到...
Irrlicht Engine 是一款高性能的3D图形渲染引擎,适用于C++程序以及.NET语言的开发环境。它支持多种平台,包括Windows,并且能够利用Direct3D、OpenGL 1.2 或其自带的软件着色器来实现实时渲染,这确保了它在不同...
最后,"引擎及所用编译器地址.txt"文件很可能包含了获取Irrlicht Engine源码和相关编译器的链接,这将帮助你获取最新版本的引擎,以及构建自定义版本的Irrlicht Engine。 总的来说,这个压缩包提供了一个全面的学习...
Irrlicht引擎是一款开源的3D图形引擎,专为游戏开发和实时三维可视化设计。这个引擎以其易用性、跨平台性和高效性能而受到开发者们的欢迎。"Irrlicht引擎例子说明及中文"压缩包文件提供了关于如何使用Irrlicht引擎的...
游戏开发初学者可以看看,全中文注释irrlicht-1.6引擎的第一个例子,后面的的例子正在翻译,敬请期待!
1. **Irrlicht引擎基础**:首先,我们需要了解Irrlicht引擎的基本架构和工作原理,包括渲染系统、场景管理、资源加载和动画处理等方面。熟悉这些基础知识是构建任何3D应用的基础。 2. **用户界面(UI)系统**:...
Irrlicht引擎是一款开源的3D图形引擎,以其高效和易用性在游戏开发和实时三维渲染领域被广泛应用。而"Irrlicht引擎的ai库"则是该引擎的一个扩展,专注于实现人工智能(AI)功能,这对于游戏中的角色行为模拟、路径...
- 下载Irrlicht3D引擎的源码或预编译库,根据你的系统选择合适的版本。 - 将Irrlicht的库文件(通常包括.lib和.dll)以及头文件(.h)添加到你的系统路径或者项目目录下。 2. **创建Qt项目**: - 使用Qt Creator...
1.7.2版本的SDK是一个小巧的24.6MB文件,下载并解压缩后,你会得到一个名为`irrlicht-1.7.2`的目录。在这个目录下,`bin\Win32-VisualStudio`路径中包含了预编译的DLL文件,适用于Visual Studio环境。 如果你打算对...
Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完全跨平台。尽管是开源的,该...
在这个项目中,FreeType源码的使用表明Irrlicht引擎通过集成FreeType库来实现了高质量的文本渲染,特别是对于中文字符的支持。FreeType库的灵活性和高效性使得中文字符能够在屏幕上清晰、流畅地显示,增强了用户体验...
- **Linux环境**:Irrlicht引擎以静态库的形式存在,开发者需要先通过源码目录下的Makefile文件进行编译。编译完成后即可运行\examples目录下的示例程序。 #### 编译需求 - **编译器兼容性**:支持多种编译器,包括...