最近在實現鼠標撿取對象時,需要實時計算射線與三角形是否相交。
涉及到了數據結構爲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
實在很誇張,記下來,防止以後犯類似錯誤。