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

来源:互联网 发布:富士触摸屏编程软件 编辑:程序博客网 时间:2024/05/29 09:11

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

涉及到了数据结构为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

 

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

0 0
原创粉丝点击