Irrlicht_0.1源码学习(6)—include/core/*

由于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图形学运算中用于各种空间转换操作。

时间: 2024-08-10 15:07:34

Irrlicht_0.1源码学习(6)—include/core/*的相关文章

Irrlicht_0.1源码学习(5)—include/core/dimension2d.h、include/core/position2d.h、IUnknown.h、Keycodes.h & include/IrrlichtDevice.h

因为之前的学习中有遇着引擎核心模块中dimension2d和position2d这两个头文件,这里我们先把这两个文件过一遍. 首先是include/core下的dimension2d.h,这个头文件里面定义了一个叫做dimension2d的模板类,用以包装一个二维尺寸. 该类的字段只有Width和Height两个,比较容易理解,然后根据其构造方式的多样性实现了三种不同的构造方法,再接着是一些重载的运算符,分别用于判断相等.不等以及赋值. 同样,include/core下的position2d.h

Irrlicht_0.1源码学习(3)—include/Irrlicht.h

从这一篇开始分析学习irrlicht源码,第一次就交给include目录下的Irrlicht.h头文件吧:) 文件的最开始是一大段绿油油的注释块,主要写了一些版权相关的东西,这里直接忽略...,有兴趣的自行阅读 然后是一连串预编译指令,没啥好说的,引用了n多的头文件,这里暂不作添加,以后分析完再一个一个慢慢添加进来就可以了. 继续向下看,这个文件包含的内容很简单,先声明一个创建引擎设备对象的函数(createDevice),然后建立一个命名空间irr,在该命名空间里又分别包含了:core.gui

Irrlicht_0.1源码学习(1)——Welcome to the Irrlicht Engine

关于Irrlicht这一引擎,想必不用过多介绍什么了,下面是我从其首页上搬来的一段介绍文字,以供参考 The Irrlicht Engine is an open source high performance realtime 3D engine written in C++. It is completely cross-platform, using D3D, OpenGL and its own software renderers, and has all of the state-o

Irrlicht_0.1源码学习(4)—include/irrTypes.h & include/IeventReceiver.h

irrTypes.h这个文件做的事很简单,通过一系列typedef操作定义了Irrlicht引擎中的所有基本数据类型,以保证引擎的可移植性. IeventReceiver.h则定义了一些用于事件系统中的枚举和结构/类.其中包含了EEVENT_TYPE.EMOUSE_INPUT_EVENT.EGUI_EVENT_TYPE三种枚举类型以及SEvent结构和IEventReceiver类. EEVENT_TYPE:用于枚举irrlicht引擎中所有的事件类型(gui事件.鼠标事件.键盘事件) //!

【源码学习之spark core 1.6.1 各种部署模式所使用的的TaskSceduler及SchedulerBackend】

说明:个人原创,转载请说明出处 http://www.cnblogs.com/piaolingzxh/p/5656879.html 未完待续 未完待续

【源码学习之spark core 1.6.1 standalone模式下的作业提交】

说明:个人原创,转载请说明出处 http://www.cnblogs.com/piaolingzxh/p/5656876.html 未完待续

jquery源码学习(一)core部分

这一部分是jquery的核心 jquery的构造器 jquery的核心工具函数 构造器 jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQu

Redis源码学习-Lua脚本

Redis源码学习-Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开发环境搭建>. 要注意的是:在Cygwin中安装Lua解析器后,SublimeClang插件就能识别出可饮用的Lua头文件了,因为Build System中我们已经配置过"-I", "D:\\cygwin64\\usr\\include",而新安装的Lua头文件会

Redis源码学习:字符串

Redis源码学习:字符串 1.初识SDS 1.1 SDS定义 Redis定义了一个叫做sdshdr(SDS or simple dynamic string)的数据结构.SDS不仅用于 保存字符串,还用来当做缓冲区,例如AOF缓冲区或输入缓冲区等.如下所示,整数len和free分别表示buf数组中已使用的长度和剩余可用的长度,buf是一个原生C字符串,以\0结尾. sds就是sdshdr中char buf[]的别名,后面能看到,各种操作函数的入参和返回值都是sds而非sdshdr.那sdshd