
Irrlicht引擎源码剖析
iduosi
求知路上的乐天派
展开
-
Irrlicht引擎源码剖析——第十天
在include分类目录下的5个模块,仅剩gui模块了。我觉得gui模块算是引擎的附加功能,可以独立出来看,所以先放下这块。一鼓作气先把引擎最重要的核心部分——video、scene的实现模块搞定。 按照之前看的顺序,先从video模块开始。在分类目录video impl下,包含Null,Software,DirectX,OpenGL四个子分类目录。根据在include\video下的Ed原创 2012-08-02 20:59:40 · 2863 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第四天
今天先看aabbox3d.h文件。在这个文件里实现了边界盒的相关操作,如边界盒与点、平面、边界盒的相交关系,重载运算符等等。 在heapsort.h中,实现了一个堆排序的算法。 在array.h中,实现了数组模板类,感觉就像SLT中的vector,该数组有堆排序、二分查找、增删元素、易调试等特点。但在二分查找函数中,有语句如下: if (!(element原创 2012-07-27 20:45:12 · 4365 阅读 · 2 评论 -
Irrlicht引擎源码剖析——第三天
今天开始看include\core部分,首先打开irrmath.h,该文件在core命名空间里定义了4个常数,如浮点数比较时的舍入精度,圆周率,以及用于角度与弧度之间转换的常数值。接着看vector2d.h,该文件实现了一个2D向量的模板类,以其相关方法的定义。因为该类中的normalize()方法的定义里调用了位于line3d.h中getLenght()函数,所以我们接下来看line原创 2012-07-26 18:09:48 · 3505 阅读 · 3 评论 -
Irrlicht引擎源码剖析——第九天
今天首先看ISceneNode.h文件,这个文件内容相比以前丰富多了。实现了场景结点的接口。对于一个场景结点,定义了结点名字、各转换矩阵、父结点指针、子结点存储链表、结点动画存储链表、结点id、结点能否访问等属性。并根据这些成员实现了一些方法,设置、获取成员变量的值,渲染前后的操作等。 接着看IAnimatedMeshSceneNode.h,在这个文件里实现了继承自IsceneNode类的原创 2012-08-01 22:07:59 · 3376 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第六天
因为昨天在CZipReader.cpp中包含了other impl中的os.h文件,且目测other impl模块内容很少,所以今天首先搞定这块。在other impl\extern目录下,包含了两个开源库——zlib和jpeglib。我们先添加这两个库,jepglib库是一个jpeg压缩库,zlib是提供数据压缩用的函式库。Other impl还包含另外3个文件:fast原创 2012-07-29 22:03:08 · 3417 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第二天
今天开始剖析代码,首先看include目录下的Irrlicht.h头文件。开始是关于该引擎的版权声明,然后是一长串预处理——各种头文件,因为这些头文件我们还没看过,所以先不添加,等以后看过了,在一一添加进来。这个文件包含的内容很简单,先声明一个创建引擎设备对象的函数,然后建立一个命名空间irr,在该命名空间里又分别包含了:core、gui、io、scene、video等5个命名空间。根据该头文件,原创 2012-07-25 19:29:50 · 4751 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第七天
首先看了一下include\scene下的头文件,发现多个头文件的预定义中包含了include\video中的头文件,所以决定先从include\video下的头文件看起。 首先是Color.h,这个文件实现了一个32位真彩色类(分32位整型和32位浮点型两种),该类用于引擎的大部分地方。只是在该类的方法中,对于设置颜色的各分量,有不同意见,如在设置alpha分量中:color =((原创 2012-07-30 22:23:04 · 3720 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第八天
根据预定义中头文件的包含关系,在include\scene中首先从ImeshBuffer.h开始看,在该文件中实现了一个网格缓冲区的类,包含了材质、顶点、索引、边界盒等信息。 在IMesh.h中,实现了网格的接口,有获取网格缓冲区信息、设置材质类型、获取边界盒等功能。 在IAnimatedMesh.h中,实现了一个动画网格的接口。有获取动画网格的帧数、获取指定帧的网格等操作。原创 2012-07-31 20:00:22 · 3347 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第五天
在目测了一番后,决定从io模块下手。先看IFileList.h,顾名思义,创建了一个文件列表类,一个基类。然后看IReadFile.h,创建了用于读取文件的基类,在前两个的基础上实现了IFileList.h中的文件系统类。文件系统(File System)管理文件和Zip文档,并提供对它们的访问。中这样在include\io中的3个头文件全搞定,接下来看io模块的实现部分。 在原创 2012-07-28 20:29:16 · 3627 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十七天
今天开始看图像用户界面(GUI)的实现了。首先是include\gui下的头文件,先预览各个文件的预定义部分,发现大多数都包含了IGUIElement.h头文件,所以首先看IGUIEnvironment.h。在该文件里实现了一个GUI全部元素(或者说GUI组件更贴切点吧)的基类。处理GUI元素的显示位置,元素与子元素的关系,元素的基本属性等等。 看完GUI所有元素的基类,接着看各个元素的实原创 2012-08-10 20:19:34 · 1596 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十六天
作者在对于引擎场景管理的实现,其大部分内容是指场景节点是如何渲染的,分为哪些不同的场景结点,诸如动画网格节点、广告牌节点、二叉空间分割树(BspTree)节点、摄像机节点、光源节点、八叉树节点等等。把这部分的实现代码剥离出来,就发现场景管理的实现很简明清晰。 昨天已经看过八叉树节点了,今天首先看网格节点。CMeshSceneNode.h/.cpp实现了如何渲染网格节点。同CMeshScen原创 2012-08-09 12:24:10 · 3367 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第一天
从今天开始,我要剖析Irrlicht(鬼火)3D游戏引擎的源代码了。剖析的版本为Irrlicht 0.1,即Irrlicht引擎的第一个版本。因为最初的版本相对来说是最简单的,从最初的版本开始剖析,然后再看之后的各个版本,可以更清楚的获知该引擎版本迭代更新的信息。从而充分了解该引擎的发展变化,自己从中也能学得更多的知识。 我的基本剖析方法是:自己新建一个项目,Irrlicht源码看到哪,自原创 2012-07-24 21:11:31 · 9221 阅读 · 5 评论 -
Irrlicht引擎源码剖析——第十五天
今天开始看scene impl部分。场景管理部分是该引擎的核心,我们要开始最精彩的部分落!当然首先从内容最少的文件开始入手。CSeneNodeAnimatorFlyCircle.h/.cpp,实现了转换动画场景结点的类。CSceneNodeAnimatorRotation.h/.cpp和其一样,也是场景结点的动画转换运算。 在CStaticMeshOBJ.h/.cpp中,声明了一个CSta原创 2012-08-08 10:48:44 · 1778 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十四天
昨天结束了CVideoSoftware类,今天看DirectX和OpenGL的封装。先看DirectX中的CDirectX8Texture.h/.cpp,在这部分的实现里,用到了d3d8.h、d3dx8tex.h头文件以及d3dx8.lib库文件。主要是对纹理的处理:获取纹理、纹理的颜色格式、复制纹理、纹理属性的各个操作等等。 在CVideoDirectX8.h/.cpp中,声明的CVid原创 2012-08-07 10:56:12 · 1769 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十三天
依照看的顺序,今天先看CTRFlat.cpp,该文件实现了一个平面着色三角形的渲染器,派生于CTRTextureGouraud接口类。与之相关的CTRFlatWire.cpp,实现了以线框形态绘制物体的渲染器类。 在CTRGouraud.cpp中,实现了一个用高洛德着色三角形的渲染器,同样派生于CTRTextureGouraud接口类,与之相关的CTRGouraudWire.cpp,实现了原创 2012-08-05 23:31:42 · 1921 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十二天
根据在include\video下的EdriverTypes.h文件中定义的驱动器类型的排列顺序,我们开始看video impl\Software下的文件。遵照头文件的包含关系以及内容多少的原则,先看S2Dvertex.h文件,在该文件中实现了一个基于2D的顶点结构。 文件IZBuffer.h中声明了一个Z缓冲接口类,在CZBuffer.h/.cpp中,声明的Z缓冲类就是该接口原创 2012-08-04 22:54:56 · 1516 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十一天
今天首先看CSurfaceLoaderBmp.h/.cpp,顾名思义给表面载入Bmp位图。建立了BMP文件头结构。声明了一个给表面载入位图的类。在isALoadableFileFormat()函数中语句:return headerID =='MB';应该为return headerID =="MB";,这是根据位图文件类型标志:0x424D,即字符串"BM"得出的。有读取位图数据、解压位图原创 2012-08-03 20:57:26 · 1501 阅读 · 0 评论 -
Irrlicht引擎源码剖析——第十八天
今天开始看GUI(图像用户界面)模块的实现部分了。首先是BuildInFont.h,内置字体,在这个头文件里作者使用了Bin2H。Bin2H是免费软件,可以从www.code3d.com 免费下载,一个将二进制文件转换到 C 头文件中的Win32命令行实用工具,数据块作为代表该文件的内容。GUIIcons.h中建立了15种图标,并注明在BuidInFont中还有13种。 接下来是各个GUI原创 2012-08-13 13:33:04 · 1975 阅读 · 0 评论