`
sogotobj
  • 浏览: 661877 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

irrlicht引擎源码剖析1 - 引擎概览

阅读更多

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!" );

设备对象具有一些设备相关的能力,比如这儿可以设置窗口标题。

// load and show quake2 .md2 model
scene::ISceneNode* node=scenemgr->addAnimatedMeshSceneNode(scenemgr->getMesh("quake2model.md2" ));
// if everything worked, add a texture and disable lighting

if
(node)
{
node->setMaterialTexture(0, driver->getTexture("texture.bmp" ));
node->setMaterialFlag(video::EMF_LIGHTING , false );
}
// add a first person shooter style user controlled camera
scenemgr->addCameraSceneNodeFPS();

这几行代码显示了scene graph体系,ISceneNode是irrlicht场景中基础组成部分节点的抽象,这儿添加了一个动画mesh节点,和一个camera节点。节点 具有材质属性(当然camera并不需要材质,但是ISceneNode作为一个抽象要尽量兼顾各种节点,为了让接口的层次简单些,这样做也是一个实用的 方法)

// draw everything
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.8.4) 是一个游戏引擎源码,欢迎各位下载学习。以前定价太高了,现在就当作福利送给大家吧。

    irrlicht-1.7.1. 引擎源码

    irrlicht-1.7.1 引擎源码是一个开源的3D图形引擎,专为游戏开发和其他实时3D应用而设计。这个源码库包含了实现高性能3D渲染、物理模拟、输入处理以及各种资源管理的功能。以下是关于irrlicht-1.7.1引擎的一些关键...

    irrlicht1.6的帮助手册-英文的

    irrlicht1.6的帮助手册-英文的帮助手册可惜没有中文的!

    irrlicht 3D 游戏引擎源码

    irrlicht 1.3版本的源码包中,你将找到包括库文件、头文件、示例程序、文档以及可能的编译工具,这些资源可以帮助你深入理解引擎的工作原理,并且快速开始自己的3D项目开发。通过研究这些源码,你可以学习到如何创建...

    最新 irrlicht(鬼火)引擎 源码

    irrlicht-1.7.2.zip irrlicht引擎是一个开源的3D图形引擎,由德国开发者Mario Kicherer创建,其名称"irrlicht"在德语中意为"鬼火",象征着它在3D世界中点亮光明。这个引擎以C++编写,支持多种操作系统,包括...

    Irrlicht引擎_Android版

    2. **源码准备**:获取Irrlicht引擎的源代码,根据Android平台的需求进行必要的修改和调整。 3. **编译命令**:使用NDK的交叉编译工具链,如`ndk-build`或CMake,执行编译命令,生成适用于Android平台的.so文件。 4....

    irrlicht-1.6引擎全中文注释教程3

    游戏开发初学者可以看看,全中文注释irrlicht-1.6引擎的第一个例子,后面的的例子正在翻译,敬请期待!

    irrlicht 引擎

    在irrlicht-1.5版本中,可能包含以下内容: - 源代码:所有irrlicht引擎的源代码,供开发者研究和定制。 - 文档:包括API参考手册、用户指南和开发日志,帮助开发者了解引擎的使用方法和开发过程。 - 示例项目:...

    鬼火引擎的最新版本 irrlicht-1.8

    irrlicht-1.8 是鬼火引擎(Irrlicht Engine)的一个重要版本更新。鬼火引擎,也称为 irrlicht,是一款流行的开源3D图形引擎,主要用于游戏开发和其他实时3D应用。这款引擎以其易用性、高效性能以及跨平台支持而受到...

    Irrlicht Engine__API-Manual.pdf

    Irrlicht Engine 是一款高性能的3D图形渲染引擎,适用于C++程序以及.NET语言的开发环境。它支持多种平台,包括Windows,并且能够利用Direct3D、OpenGL 1.2 或其自带的软件着色器来实现实时渲染,这确保了它在不同...

    Irrlicht引擎学习教程

    最后,"引擎及所用编译器地址.txt"文件很可能包含了获取Irrlicht Engine源码和相关编译器的链接,这将帮助你获取最新版本的引擎,以及构建自定义版本的Irrlicht Engine。 总的来说,这个压缩包提供了一个全面的学习...

    Irrlicht引擎例子说明及中文

    Irrlicht引擎是一款开源的3D图形引擎,专为游戏开发和实时三维可视化设计。这个引擎以其易用性、跨平台性和高效性能而受到开发者们的欢迎。"Irrlicht引擎例子说明及中文"压缩包文件提供了关于如何使用Irrlicht引擎的...

    irrlicht-1.6引擎全中文注释教程1

    游戏开发初学者可以看看,全中文注释irrlicht-1.6引擎的第一个例子,后面的的例子正在翻译,敬请期待!

    Irrlicht 游戏引擎开发 cooliris 界面(三)

    1. **Irrlicht引擎基础**:首先,我们需要了解Irrlicht引擎的基本架构和工作原理,包括渲染系统、场景管理、资源加载和动画处理等方面。熟悉这些基础知识是构建任何3D应用的基础。 2. **用户界面(UI)系统**:...

    Irrlicht引擎的ai库

    Irrlicht引擎是一款开源的3D图形引擎,以其高效和易用性在游戏开发和实时三维渲染领域被广泛应用。而"Irrlicht引擎的ai库"则是该引擎的一个扩展,专注于实现人工智能(AI)功能,这对于游戏中的角色行为模拟、路径...

    在Qt中使用Irrlicht3D引擎

    - 下载Irrlicht3D引擎的源码或预编译库,根据你的系统选择合适的版本。 - 将Irrlicht的库文件(通常包括.lib和.dll)以及头文件(.h)添加到你的系统路径或者项目目录下。 2. **创建Qt项目**: - 使用Qt Creator...

    3D游戏引擎irrlicht

    1.7.2版本的SDK是一个小巧的24.6MB文件,下载并解压缩后,你会得到一个名为`irrlicht-1.7.2`的目录。在这个目录下,`bin\Win32-VisualStudio`路径中包含了预编译的DLL文件,适用于Visual Studio环境。 如果你打算对...

    Irrlicht引擎(鬼火游戏引擎 C++版)SVN版本

    Irrlicht引擎是一个用C++书写的高性能实时的3D引擎,可以应用于C++程序或者.NET语言中。通过使用Direct3D(Windows平台),OpenGL 1.2或它自己的软件着色程序,可以实现该引擎的完全跨平台。尽管是开源的,该...

    Irrlicht 中文支持引擎

    在这个项目中,FreeType源码的使用表明Irrlicht引擎通过集成FreeType库来实现了高质量的文本渲染,特别是对于中文字符的支持。FreeType库的灵活性和高效性使得中文字符能够在屏幕上清晰、流畅地显示,增强了用户体验...

    irrlicht鬼火引擎demo中文文档

    - **Linux环境**:Irrlicht引擎以静态库的形式存在,开发者需要先通过源码目录下的Makefile文件进行编译。编译完成后即可运行\examples目录下的示例程序。 #### 编译需求 - **编译器兼容性**:支持多种编译器,包括...

Global site tag (gtag.js) - Google Analytics