Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

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

orxonox/trunk: the separation plane is also drawn for debug purposes. vert separation seems to malfunction

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