由于irrlicht引擎core部分的主要内容为一系列的自定数据结构以及一些重要的常量,理解难度着实不大,毕竟都是一些coding的基本功了。
首先打开irrmath.h,该文件在core命名空间里定义了4个常数:用于32位浮点数比较的误差精度ROUNDING_ERROR、圆周率常量PI、以及角度弧度相互转换的转换系数GRAD_PI和GRAD_PI2。
接着我们打开heapsort.h,看文件名就能猜到,这个文件应该是用来实现堆排序功能的。果不其然,该文件中只实现了两个堆排序相关的函数:heapsink及heapsort。
其中函数heapsink用于构造一个最大堆,而函数heapsort则是接收一个数组,内部通过调用函数heapsink将接收的数组构造为一个最大堆。然后利用堆排序算法完成对模板数组的排序工作。
接下来继续看array.h这个文件,该文件实现了一个动态数组模板类,内置堆排序,二分查找,增删元素,清空数组,动态管理等特性。
在list.h中,实现了一个双向链表模板类。
在irrstring.h中,实现了字符串模板类。
在rect.h中,实现了矩形模板类rect和扩展矩形模板类rectEx,具有形状的重叠检测的功能。这两个模板类的主要区别在于它们的实线方式不同,rect以一个dimension2d对象表示的尺寸加上一个position2d对象标识的左上角坐标确定矩形大小及位置,而扩展的模板类rectEx则以position2d对象标识的左上角坐标和右下角坐标确定矩形大小及位置。
line2d.h和line3d.h分别封装了二维及三维空间中的线段数据结构的定义。
vector2d.h和vector3d.h则分别实现了二维向量与三维向量两个数据结构,且均实现了相关的基本运算,如:向量与标量间运算,向量与向量间运算,旋转操作,单位化等等。
plane3d.h中创建了平面模板类,并定义了点/线与平面的相交关系枚举。plane3dex.h中则创建了一个扩展版的平面模板类,通过添加一个用来描述平面到坐标原点O的距离字段D来加速运算。这两种平面类的实现中均提供了点法式指定平面、判断平面与指定点/线的相交关系等特性。
aabbox3d.h文件。在这个文件里实现了轴对齐包围盒aabbox3d类,该类内部借助MinEdge与MaxEdge这两个三维向量指定包围盒大小尺寸。
在matrix4.h中,实现了一个4x4矩阵模板类,主要是在3D图形学运算中用于各种空间转换操作。