123
This commit is contained in:
69
CryPhysics/aabbtree.h
Normal file
69
CryPhysics/aabbtree.h
Normal file
@@ -0,0 +1,69 @@
|
||||
#ifndef aabbtree_h
|
||||
#define aabbtree_h
|
||||
|
||||
struct AABBnode {
|
||||
unsigned int minx : 7;
|
||||
unsigned int maxx : 7;
|
||||
unsigned int miny : 7;
|
||||
unsigned int maxy : 7;
|
||||
unsigned int minz : 7;
|
||||
unsigned int maxz : 7;
|
||||
unsigned int ichild : 15;
|
||||
unsigned int ntris : 6;
|
||||
unsigned int bSingleColl : 1;
|
||||
};
|
||||
|
||||
class CTriMesh;
|
||||
|
||||
class CAABBTree : public CBVTree {
|
||||
public:
|
||||
CAABBTree() {}
|
||||
virtual ~CAABBTree() {
|
||||
if (m_pNodes) delete[] m_pNodes; m_pNodes=0;
|
||||
if (m_pTri2Node) delete[] m_pTri2Node; m_pTri2Node=0;
|
||||
}
|
||||
virtual int GetType() { return BVT_AABB; }
|
||||
|
||||
float Build(CGeometry *pMesh);
|
||||
virtual void SetGeomConvex();
|
||||
|
||||
void SetParams(int nMinTrisPerNode,int nMaxTrisPerNode, float skipdim, const matrix3x3f &Basis);
|
||||
float BuildNode(int iNode, int iTriStart,int nTris, vectorf center,vectorf size, int nDepth);
|
||||
|
||||
virtual int PrepareForIntersectionTest(geometry_under_test *pGTest);
|
||||
virtual void CleanupAfterIntersectionTest(geometry_under_test *pGTest);
|
||||
virtual void GetBBox(box *pbox);
|
||||
virtual int MaxPrimsInNode() { return m_nMaxTrisInNode; }
|
||||
virtual void GetNodeBV(BV *&pBV, int iNode=0);
|
||||
virtual void GetNodeBV(BV *&pBV, const vectorf &sweepdir,float sweepstep, int iNode=0);
|
||||
virtual void GetNodeBV(const matrix3x3f &Rw,const vectorf &offsw,float scalew, BV *&pBV, int iNode=0);
|
||||
virtual void GetNodeBV(const matrix3x3f &Rw,const vectorf &offsw,float scalew, BV *&pBV, const vectorf &sweepdir,float sweepstep, int iNode=0) {}
|
||||
virtual float SplitPriority(const BV* pBV);
|
||||
virtual void GetNodeChildrenBVs(const matrix3x3f &Rw,const vectorf &offsw,float scalew, const BV *pBV_parent, BV *&pBV_child1,BV *&pBV_child2);
|
||||
virtual void GetNodeChildrenBVs(const BV *pBV_parent, BV *&pBV_child1,BV *&pBV_child2);
|
||||
virtual void GetNodeChildrenBVs(const BV *pBV_parent, const vectorf &sweepdir,float sweepstep, BV *&pBV_child1,BV *&pBV_child2);
|
||||
virtual void ReleaseLastBVs();
|
||||
virtual void ReleaseLastSweptBVs();
|
||||
virtual int GetNodeContents(int iNode, BV *pBVCollider,int bColliderUsed,int bColliderLocal,
|
||||
geometry_under_test *pGTest,geometry_under_test *pGTestOp);
|
||||
virtual int GetNodeContentsIdx(int iNode, int &iStartPrim) { iStartPrim = m_pNodes[iNode].ichild; return m_pNodes[iNode].ntris; }
|
||||
virtual void MarkUsedTriangle(int itri, geometry_under_test *pGTest);
|
||||
|
||||
virtual void GetMemoryStatistics(ICrySizer *pSizer);
|
||||
virtual void Save(CMemStream &stm);
|
||||
virtual void Load(CMemStream &stm, CGeometry *pGeom);
|
||||
|
||||
CTriMesh *m_pMesh;
|
||||
AABBnode *m_pNodes;
|
||||
int m_nNodes,m_nNodesAlloc;
|
||||
vectorf m_center;
|
||||
vectorf m_size;
|
||||
matrix3x3f m_Basis;
|
||||
int m_bOriented;
|
||||
int *m_pTri2Node,m_nBitsLog;
|
||||
int m_nMaxTrisPerNode,m_nMinTrisPerNode;
|
||||
int m_nMaxTrisInNode;
|
||||
float m_maxSkipDim;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user