Irrlicht引擎源码剖析——第一天

来源:互联网 发布:windows安装nginx lua 编辑:程序博客网 时间:2024/05/17 22:23


从今天开始,我要剖析Irrlicht(鬼火)3D游戏引擎的源代码了。剖析的版本为Irrlicht 0.1,即Irrlicht引擎的第一个版本。因为最初的版本相对来说是最简单的,从最初的版本开始剖析,然后再看之后的各个版本,可以更清楚的获知该引擎版本迭代更新的信息。从而充分了解该引擎的发展变化,自己从中也能学得更多的知识。

 

我的基本剖析方法是:自己新建一个项目,Irrlicht源码看到哪,自己就写到哪,等把整个Irrlicht 0.1看完后,自己也把引擎写了一遍,这样对整个引擎的架构更加了然于心。写的过程中,遇到问题并解决后,更能加深理解。


从Irrlicht的官方论坛(http://irrlicht.sourceforge.net/)上可以下载到各个版本的源代码。用VS 2008打开Irrlicht 0.1,如右图所示。可以看到该项目包含7个目录和3个源码文件。doc目录包含的是文档信息,不过该目录下包含的Todo.txt是无效文件。因为在编程过程中,会在某问题暂时无法解决的地方用“//TODO”注释,所以Todo.txt应该是记载问题用的。

 

include目录下包含5个子目录和6个头文件,如右图所示。从include包含的信息来看,整个引擎可分为6个模块:引擎模块(6个头文件)、引擎核心模块(core)、图形界面模块(gui)、输入输出模块(io)、场景管理模块(scene)、以及显示模块(video)。

 

根据6个模块的划分,可以清晰地得知6个实现:引擎初始化(3个代码文件)、图形界面(gui impl)、输入输出(io impl)、其它(other impl)、场景(scene impl)、显示(video)。那么引擎核心模块(core)的实现在哪呢?在快速浏览一下include\core下的头文件后,发现在头文件中就对core进行了实现。core部分就是作者自己写的一些数据结构的实现,比如向量、矩阵、字符串等。


在other impl目录下包含了jepglib库和zlib库,但是并没有包含有效的代码文件,我们要重新添加这两个库文件。jepglib库是一个jpeg压缩库,zlib是提供数据压缩用的函式库。fast_atof.h从文件名可得知:快速完成从字符串到浮点类型的数据转换。os.h/.cpp包含各种信息输出的功能,如系统警告信息或调试消息等。

 

在video impl目录下包含了DirectX、OpenGL等子目录。该模块对DirectXOpenGL等图形函数库进行了封装。

 

以上是对Irrlicht 0.1项目的文件目录树分析的结果。统计了一下代码文件数量:include共含59个,io impl :12个,gui impl :26个,other impl :3个(不包含jepglib和zlib),scene impl :35个,video impl :45个,还有另外3个,总共183个代码文件。如果每天只学习2个代码文件要花费92天功夫,如果每天解决5个要花37天,如果每天可以搞定10个,就只要花19天,若能一天消灭20个,则10天就可以把这个引擎全部代码过一遍了。当然搞技术不能急功近利,不能贸然图快。毕竟是来学东西的,要搞清楚每个细节。但我这么一划分,每天做多少任务,心里大致有个底。这样可以避免一些小问题,比如:经过一段时间学习后还不知道自己走到哪个位置了;经过一段时间的学习,自己到底获知了哪些;每天消灭几个,总数就减少几个,可以鼓舞士气等等。

 

今天就到这里,明天开始敲代码,消灭代码文件数罗!


Irrlicht 0.1版本源代码下载地址:http://download.csdn.net/detail/iduosi/4450160

zlib库源代码下载地址:http://download.csdn.net/detail/iduosi/4453123

jepglib库源代码下载地址:http://download.csdn.net/detail/iduosi/4453133