關於構建AABB樹過程中內存優化

最近在實現鼠標撿取對象時,需要實時計算射線與三角形是否相交。

涉及到了數據結構爲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

 

實在很誇張,記下來,防止以後犯類似錯誤。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章