Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: orxonox.OLD/orxonox/trunk/src/lib/collision_detection/obb_tree_node.h @ 4685

Last change on this file since 4685 was 4685, checked in by bensch, 19 years ago

orxonox/trunk: code-design

File size: 3.0 KB
Line 
1/*!
2    \file bv_tree.h
3    \brief Definition of a bounding volume tree
4
5 */
6
7#ifndef _OBB_TREE_NODE_H
8#define _OBB_TREE_NODE_H
9
10#include "bv_tree_node.h"
11
12
13
14// FORWARD DEFINITION
15class BoundingVolume;
16class OBB;
17class OBBTree;
18class Plane;
19//struct sVec3D;
20
21//! A class that represents a bounding volume tree
22class OBBTreeNode : public BVTreeNode {
23
24
25  public:
26    OBBTreeNode();
27    virtual ~OBBTreeNode();
28
29    virtual void spawnBVTree(const int depth, sVec3D *verticesList, const int length);
30
31    BoundingVolume* getBV(int index) const { return (BoundingVolume*)this->bvElement; }
32    inline const int getIndex() { return this->treeIndex; }
33    inline void setTreeRef(OBBTree* tree) { this->obbTree = tree;}
34
35    virtual void collideWith(const BVTree &tree);
36
37    virtual void drawBV(int depth, int drawMode) const;
38
39    void debug(void) const;
40
41  private:
42    void calculateBoxCovariance(OBB* box, sVec3D* verticesList, int length);
43    void calculateBoxEigenvectors(OBB* box, sVec3D* verticesList, int length);
44    void calculateBoxAxis(OBB* box, sVec3D* verticesList, int length);
45    void forkBox(OBB* box);
46
47
48  protected:
49    OBB*                bvElement;                  //!< the obb element
50    OBBTreeNode*        nodeLeft;                   //!< ref to the left tree node
51    OBBTreeNode*        nodeRight;                  //!< ref to the right tree node
52
53
54  private:
55    unsigned int        treeIndex;                  //!< Index number of the BV in the tree
56    sVec3D*             vertices;                   //!< pointer to the vertices data
57    int                 numOfVertices;              //!< number of vertices in vertices data
58    int                 depth;                      //!< the depth of the node in the tree
59    static OBBTree*     obbTree;                    //!< reference to the obb tree
60    Plane*              separationPlane;            //!< the separation plane of the obb
61    sVec3D*             sepPlaneCenter;             //!< only needed to draw plane \todo: separationPlane drawing
62    int                 longestAxisIndex;           //!< only needed to draw plane
63
64    /* tmp saving place for obb variables */
65    sVec3D*             tmpVert1;                   //!< pointer to the vert data of obbox1
66    sVec3D*             tmpVert2;                   //!< pointer to the vert data of obbox1
67    int                 tmpLen1;                    //!< len vert data obbox1
68    int                 tmpLen2;                    //!< len vert data obbox2
69
70    static float**       coMat;                     //!< temp covariance matrice save place - consumes less mem
71    static float**       eigvMat;                   //!< temp eigenvector matrice save place
72    static float*        eigvlMat;                  //!< temp eigenvalue vector save place
73    static int*          rotCount;                  //!< temp rotations count save place: how many givens-rotations where needed to transform the matrix :)
74
75    GLUquadricObj*    sphereObj;
76};
77
78#endif /* _OBB_TREE_NODE_H */
Note: See TracBrowser for help on using the repository browser.