关于构建AABB树过程中内存优化

时间:2022-02-04 20:25:57

最近在实现鼠标捡取对象时,需要实时计算射线与三角形是否相交。

涉及到了数据结构为AABB树,具体参考http://www.codercorner.com/Opcode.htm


为了测试内存的使用,选取的测试用例为220w的三角形面片的模型。

一开始自己创建的节点类为:

class AABBTreeNode
{
//*************
float *box;//当前节点的包围盒
int *m_NodePrimitives;
intmNbPrimitives;
AABBTreeNode *left;
AABBTreeNode *right;
}
构造过程中不断的new出包围盒的数据

同时在构造树的递归过程中,不断的new左右子树指针。

刚开始的内存占用为:总共700M左右

实在难以承受。


然后参考OPCODE实现思路

class AABBTreeNode
{
//*************
<span style="color:#ff0000;"> float box[6];//当前节点的包围盒</span>
int *m_NodePrimitives;
intmNbPrimitives;
AABBTreeNode *left;
AABBTreeNode *right;
}

经过这个步骤内存降了100M左右。

同时在构造节点过程中预先new出内存:

AABBTreeNode *root = new AABBTreeNode[2 * mNbPrimitives-1];

此时内存总共占用约为230M

 

实在很夸张,记下来,防止以后犯类似错误。