home *** CD-ROM | disk | FTP | other *** search
- #ifndef __SpacePartitioningTree_h__
- #define __SpacePartitioningTree_h__
-
- /*!
- \file SpacePartitioningTree.h
- \author Karsten Schwenk
-
- \brief This file contains the base classes for space partitioning trees
-
- \todo document everything
- */
-
- #include "Model.h"
- #include "Mesh.h"
- #include "vectormath.h"
- #include "collision.h"
-
- #include "BitSet.h"
- #include "PotentialVisibilitySet.h"
- #include "Q3bspExtension.h"
-
- class SpacePartitioningTreeNode;
-
- class SpacePartitioningTree{
- public:
- Model* model;
- vec3_t min, max;
- int numLevels, numNodes, numFaces;
- SpacePartitioningTreeNode** nodes;
- BitSet* facesDrawn;
- PotentialVisibilitySet* pvs;
- Q3bspExtension* q3bspExtension;
-
- SpacePartitioningTree(Model* model);
- virtual ~SpacePartitioningTree();
-
- virtual SpacePartitioningTreeNode* getLeafNodeContainingPoint(vec3_t point);
- virtual SpacePartitioningTreeNode* getNodeContainingPoint(vec3_t point, int maxLevel);
- virtual vector<SpacePartitioningTreeNode*> getLeafNodesIntersectingAABB(vec3_t min, vec3_t max);
-
- virtual void traceRay(/*vec3_t startPos, vec3_t dir,*/ trace_t* trace);
- virtual void traceLinesegment(/*vec3_t pos1, vec3_t pos2,*/ trace_t* trace);
- virtual void traceAABB(/*vec3_t pos1, vec3_t pos2, vec3_t min, vec3_t max,*/ trace_t* trace);
-
- virtual void render();
- virtual void drawBorders();
-
- virtual void importPVS(PotentialVisibilitySet* pvs);
-
- SpacePartitioningTreeNode* root;
- };
-
- class SpacePartitioningTreeNode{
- public:
- SpacePartitioningTree* tree;
- Mesh* mesh;
- bool leafNode;
- vec3_t min, max;
- int level;
- unsigned int* faceIds;
- unsigned int nodeId;
-
- SpacePartitioningTreeNode** childs;
- int numChilds;
- SpacePartitioningTreeNode** neighbours;
- int numNeighbours;
- SpacePartitioningTreeNode* parent;
-
- SpacePartitioningTreeNode(SpacePartitioningTree* tree);
- virtual ~SpacePartitioningTreeNode();
-
- virtual void buildNode()=0;
- virtual void buildNeighbourhoodInfo()=0;
-
- virtual Face* getFaceIntersectingAABB(vec3_t min, vec3_t max);
- virtual Face* getFrontFacingFaceIntersectingAABB(vec3_t min, vec3_t max, vec3_t dir);
- virtual void collectFacesIntersectingAABB(vec3_t min, vec3_t max, vector<Face*>& ret);
- virtual void collectFrontFacingFacesIntersectingAABB(vec3_t min, vec3_t max, vec3_t dir, vector<Face*>& ret);
- virtual void collectFacesIntersectingRay(vec3_t startPos, vec3_t dir, vector<Face*>& ret);
- virtual void collectFrontFacingFacesIntersectingRay(vec3_t startPos, vec3_t dir, vector<Face*>& ret);
- virtual void collectLeafNodesIntersectingAABB(vec3_t min, vec3_t max, vector<SpacePartitioningTreeNode*>& ret);
-
- virtual void traceRay(trace_t* trace);
- virtual void traceLinesegment(trace_t* trace);
- // virtual void traceAABB(trace_t* trace);
-
- virtual void render();
- virtual void drawBorders();
- };
-
-
-
-
-
- #endif /* __SpacePartitioningTree_h__ */
-
-