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

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

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

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

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

class AABBTreeNode
{
//*************
    float *box;//当前节点的包围盒
	int *m_NodePrimitives;
	int mNbPrimitives;
	AABBTreeNode *left;
	AABBTreeNode *right;
}

构造过程中不断的new出包围盒的数据

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

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

实在难以承受。

然后参考OPCODE实现思路

class AABBTreeNode
{
//*************
    float box[6];//当前节点的包围盒</span>
	int *m_NodePrimitives;
	int mNbPrimitives;
	AABBTreeNode *left;
	AABBTreeNode *right;
}

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值