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

  • 相关阅读:
    论文摘记 2017.4.6-4.9
    P4 PI库安装
    Markdown中的表格
    Easy install ryu
    《重构网络-SDN架构与实现》阅读随笔
    解决Github Desktop Repo publish 失败问题
    解决 "OperationalError: (sqlite3.OperationalError) no such table: ..."问题
    初始化 Flask 虚拟环境 命令
    Flask: socket.error: [Errno 48] Address already in use 问题
    【转】TCP端口号记录
  • 原文地址:https://www.cnblogs.com/MuSmile/p/5350397.html
Copyright © 2020-2023  润新知