//============================================================================ // obbtree.hpp //============================================================================ #ifndef _OBBTREE_ #define _OBBTREE_ #include "common.hpp" #include "m33.hpp" #include "bvtree.hpp" class OBBtree : public BVtree { protected: // TREE OPERATIONS void BuildHierarchy(); int Subdivide(); void FindTightFit(); m33 GetCovariance(); m33 GetBestOrientation(); // OBB VERTS (in order: RTN,LTN,LBN,RBN,RTF,LTF,LBF,RBF) static Vect3d obbV[8]; public: // NODE (BV) OPERATIONS int OverlapPlane(Plane P) const; int EdgeIntersect(Vect3d Start, Vect3d End) const; int RayIntersect(Vect3d Start, Vect3d Dir, float& InT, float& OutT) const; int OverlapVF(ViewFrustum* VF) const; m33 pR; // ORIENTATION (ROTATION) IN MODEL SPACE (COLS FORM OBB AXES) Vect3d pT, Dim; // ORIGIN OF BOX IN MODEL SPACE AND BOX RADII ("half" dimensions) Vect3d Xaxis() const { return (pR.col(0)); }; // RETURNS OBB X AXIS Vect3d Yaxis() const { return (pR.col(1)); }; // RETURNS OBB Y AXIS Vect3d Zaxis() const { return (pR.col(2)); }; // RETURNS OBB Z AXIS OBBtree() : BVtree() { pR=Identity(); }; OBBtree(PtSetObjList* OL, int minobjs=10) : BVtree(minobjs) { pR=Identity(); printf("copying PtSetObjList. . ."); CopyPtSetObjList(OL); printf("DONE!\n"); printf("building OBBtree. . ."); BuildHierarchy(); printf("DONE!\n"); printf("freeing objects, extracting IDs. . ."); PtSetObjListToIDs(); printf("DONE!\n"); }; }; #endif