Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file since 4638 was 4638, checked in by patrick, 19 years ago

orxonox/trunk: changed the way the data is displayed, now supports colors and stuff. noticed some data drawing problems. the tree separation seems so work perfectly but the graphical data representation is buggy

File size: 2.9 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();
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.