irrlicht源码总结(一)

        为了学习,最近看irrlicht的源代码,希望能与同样感兴趣的分享一些收获。由于水平有限,可能有部分不当之初,还请多多指教。

       引擎的代码直接去官网下即可,我下的版本是irrlicht-1.8.4,至于源代码在哪,请看其他人的介绍了,我就不说了。

        直接进入...\irrlicht-1.8.4\source\Irrlicht\Irrlicht12.0.vcxproj ,用visual stdio打开,看见一大串文件。其中include文件中的是整个引擎对外的接口,Irrlicht文件中是编译时的核心文件。当然,因为少了一些配件,笔者的电脑无法编译完整的irrlicht,所以要直接用的话,还是dll用起来比较方便。好了,话不多说,下面进入正题。

        要看源码,应该先从include文件看起,首先点开irrlicht.h文件,里面不过是将所有头文件包含起来了而已,这就是为什么我们使用#include“irrlicht.h”就能使用到引擎所有的头文件的原因,然后,我们看这个IrrCompileConfig.h文件,这里面靠宏来区分我们不同平台的编译,生成。比如,如果在gcc上,则__GNUC__ 是被定义了的,而VS上,则有_MSC_VER的定义,而且这个宏的大小代表了你使用的版本。所以这个文件的作用就是判断你使用的编译平台(或者说设备)支持哪些,不支持哪些。

        接下来看IReferenceCounted.h,这个用过COM的肯定很熟了,这里定义了一个计引用次数的类,它将作为所有对象的父类,其实使用c++标准库的智能指针也能达到这个效果。只不过irrlicht自力更生编写了一个。

        然后是irrTypes.h,这里定义了一些数据的类型,其实主要是为了使用8,16位的整数,因为其它类型如int,float都是跨平台兼容的。

        接下来的几个文件就比较类似了,有好几个纯虚类,它们是为了给整个引擎提供一个统一的接口。ITimer提供时间的接口,IRandomizer提供随机数的接口,IOSOperator提供了兼容苹果系统的接口,ILogger提供写日志记录的接口,Keycodes中定义了键盘的按键位置,SKeyMap定义了按键的行为,它们有一点区别,所谓位置,就是指按的是哪一个键,而行为,就是比如按了一次或者两次这个键。IEventReceiver.h中提供了事件的接口,其实狭义上的事件就是点鼠标,键盘,或者玩游柄,但为了方便设计,提高效率,irrlicht还定义了gui事件和logger事件。SIrrCreationParameters.h中很简单,只不过定了一个包含你对电脑这个设备的一些信息,这些信息就是拿来设置显示屏的,是全屏还是窗口?窗口多大?窗口的名称是什么?显示颜色有多少位深?等等。IrrlichtDevice.h则是一个核心的虚类,这个类包含了所有irrlicht的功能,你只需要调用这个类提供的函数就可以达到使用引擎的目的。所以,经过这几个头文件,整个irrlicht的框架已经建立起来了。接下来就只剩下对以上虚函数的实例化。




        

你可能感兴趣的:(irrlicht源码总结(一))