home *** CD-ROM | disk | FTP | other *** search
/ Enter 2005 March / ENTER.ISO / files / fwp-0.0.6-win32-installer.exe / SpacePartitioningTree.h < prev    next >
Encoding:
C/C++ Source or Header  |  2004-12-18  |  2.8 KB  |  97 lines

  1. #ifndef __SpacePartitioningTree_h__
  2. #define __SpacePartitioningTree_h__
  3.  
  4. /*!
  5. \file SpacePartitioningTree.h
  6. \author Karsten Schwenk
  7.  
  8. \brief This file contains the base classes for space partitioning trees
  9.  
  10. \todo document everything
  11. */
  12.  
  13. #include "Model.h"
  14. #include "Mesh.h"
  15. #include "vectormath.h"
  16. #include "collision.h"
  17.  
  18. #include "BitSet.h"
  19. #include "PotentialVisibilitySet.h"
  20. #include "Q3bspExtension.h"
  21.  
  22. class SpacePartitioningTreeNode;
  23.  
  24. class SpacePartitioningTree{
  25. public:
  26.     Model* model;
  27.     vec3_t min, max;
  28.     int numLevels, numNodes, numFaces;
  29.     SpacePartitioningTreeNode** nodes;
  30.     BitSet* facesDrawn;
  31.     PotentialVisibilitySet* pvs;
  32.     Q3bspExtension* q3bspExtension;
  33.  
  34.     SpacePartitioningTree(Model* model);
  35.     virtual ~SpacePartitioningTree();
  36.     
  37.     virtual SpacePartitioningTreeNode* getLeafNodeContainingPoint(vec3_t point);
  38.     virtual SpacePartitioningTreeNode* getNodeContainingPoint(vec3_t point, int maxLevel);
  39.     virtual vector<SpacePartitioningTreeNode*> getLeafNodesIntersectingAABB(vec3_t min, vec3_t max);
  40.  
  41.     virtual void traceRay(/*vec3_t startPos, vec3_t dir,*/ trace_t* trace);
  42.     virtual void traceLinesegment(/*vec3_t pos1, vec3_t pos2,*/ trace_t* trace);
  43.     virtual void traceAABB(/*vec3_t pos1, vec3_t pos2, vec3_t min, vec3_t max,*/ trace_t* trace);
  44.     
  45.     virtual void render();
  46.     virtual void drawBorders();
  47.  
  48.     virtual void importPVS(PotentialVisibilitySet* pvs);
  49.  
  50.     SpacePartitioningTreeNode* root;
  51. };
  52.  
  53. class SpacePartitioningTreeNode{
  54. public:
  55.     SpacePartitioningTree* tree;
  56.     Mesh* mesh;
  57.     bool leafNode;
  58.     vec3_t min, max;
  59.     int level;
  60.     unsigned int* faceIds;
  61.     unsigned int nodeId;
  62.  
  63.     SpacePartitioningTreeNode** childs;
  64.     int numChilds;
  65.     SpacePartitioningTreeNode** neighbours;
  66.     int numNeighbours;
  67.     SpacePartitioningTreeNode* parent;
  68.  
  69.     SpacePartitioningTreeNode(SpacePartitioningTree* tree);
  70.     virtual ~SpacePartitioningTreeNode();
  71.  
  72.     virtual void buildNode()=0;
  73.     virtual void buildNeighbourhoodInfo()=0;
  74.  
  75.     virtual Face* getFaceIntersectingAABB(vec3_t min, vec3_t max);
  76.     virtual Face* getFrontFacingFaceIntersectingAABB(vec3_t min, vec3_t max, vec3_t dir);
  77.     virtual void collectFacesIntersectingAABB(vec3_t min, vec3_t max, vector<Face*>& ret);
  78.     virtual void collectFrontFacingFacesIntersectingAABB(vec3_t min, vec3_t max, vec3_t dir, vector<Face*>& ret);
  79.     virtual void collectFacesIntersectingRay(vec3_t startPos, vec3_t dir, vector<Face*>& ret);
  80.     virtual void collectFrontFacingFacesIntersectingRay(vec3_t startPos, vec3_t dir, vector<Face*>& ret);
  81.     virtual void collectLeafNodesIntersectingAABB(vec3_t min, vec3_t max, vector<SpacePartitioningTreeNode*>& ret);
  82.  
  83.     virtual void traceRay(trace_t* trace);
  84.     virtual void traceLinesegment(trace_t* trace);
  85. //    virtual void traceAABB(trace_t* trace);
  86.  
  87.     virtual void render();
  88.     virtual void drawBorders();
  89. };
  90.  
  91.  
  92.  
  93.  
  94.  
  95. #endif    /* __SpacePartitioningTree_h__ */
  96.  
  97.