Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

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

Last change on this file was 9869, checked in by bensch, 18 years ago

orxonox/trunk: merged the new_class_id branche back to the trunk.
merged with command:
svn merge https://svn.orxonox.net/orxonox/branches/new_class_id trunk -r9683:HEAD
no conflicts… puh..

File size: 3.3 KB
RevLine 
[4614]1/*!
[5039]2 * @file bv_tree.h
[7711]3 *  Definition of a bounding volume tree
[4614]4 */
[4541]5
6#ifndef _OBB_TREE_NODE_H
7#define _OBB_TREE_NODE_H
8
[7711]9
[4541]10#include "bv_tree_node.h"
[7711]11#include "plane.h"
[4541]12
13class BoundingVolume;
[4557]14class OBB;
[4622]15class OBBTree;
[4632]16class Plane;
[4700]17class PNode;
[4541]18
19//! A class that represents a bounding volume tree
[7711]20class OBBTreeNode : public BVTreeNode
21{
[9869]22  ObjectListDeclaration(OBBTreeNode);
[4614]23  public:
[7711]24    OBBTreeNode(const OBBTree& tree, OBBTreeNode* prev, int depth);
[4614]25    virtual ~OBBTreeNode();
[4541]26
[7711]27    /**  this function returns the bounding volume of this tree node @return: returns the BV */
28    virtual inline const BoundingVolume* getBV() const { return (BoundingVolume*)this->bvElement; }
[4541]29
[7711]30    virtual void spawnBVTree(const modelInfo& modelInf, const int* triangleIndexes, int length);
[9235]31    void createBox(Vector start, Vector end);
[4541]32
[5028]33    virtual void collideWith(BVTreeNode* treeNode, WorldEntity* nodeA, WorldEntity* nodeB);
[5481]34    virtual void drawBV(int depth, int drawMode, const Vector& color = Vector(1,0,0), bool top = true) const;
[4746]35    void debug() const;
[4568]36
[7711]37    /**  gets the id of the current child @return id of the child */
38    inline const int getID() { return this->nextID++; }
39
40
[4614]41  private:
[7711]42    void calculateBoxAxis(OBB& box, const sVec3D* verticesList, unsigned int length);
[5693]43
[7711]44    void calculateBoxCovariance(OBB& box, const modelInfo& modelInf, const int* triangleIndexes, int length);
45    void calculateBoxEigenvectors(OBB& box, const modelInfo& modelInf, const int* triangleIndexes, int length);
46    void calculateBoxAxis(OBB& box, const modelInfo& modelInf, const int* triangleIndexes, int length);
47    void forkBox(OBB& box);
[5684]48
[7732]49    void collideWithOBB(OBBTreeNode* treeNode, WorldEntity* nodeA, WorldEntity* nodeB);
50    bool overlapTest(OBB* boxA, OBB* boxB, WorldEntity* nodeA, WorldEntity* nodeB);
[5693]51
[4541]52
[4614]53  protected:
[4685]54    OBB*                bvElement;                  //!< the obb element
[7711]55    OBBTreeNode*        nodePrev;                   //!< ref to the previous (parent) tree node = NULL if first
[4685]56    OBBTreeNode*        nodeLeft;                   //!< ref to the left tree node
57    OBBTreeNode*        nodeRight;                  //!< ref to the right tree node
[4541]58
[7711]59
[4614]60  private:
[7711]61    int                 treeIndex;                  //!< Index number of the BV in the tree
62    int                 nextID;                     //!< the id of the next child
[4614]63    int                 depth;                      //!< the depth of the node in the tree
[7711]64    const OBBTree*      obbTree;                    //!< reference to the obb tree
65
66    const modelInfo*    modelInf;                   //!< pointer to the models modelInfo object
67    const int*          triangleIndexes;            //!< indexes to the used model triangles
68
69    Plane               separationPlane;            //!< the separation plane of the obb
70    sVec3D              sepPlaneCenter;             //!< only needed to draw plane
[4632]71    int                 longestAxisIndex;           //!< only needed to draw plane
[4630]72
73    /* tmp saving place for obb variables */
[7711]74    int*                triangleIndexList1;         //!< pointer to the vert data of obbox1
75    int*                triangleIndexList2;         //!< pointer to the vert data of obbox1
76    int                 triangleIndexLength1;       //!< len vert data obbox1
77    int                 triangleIndexLength2;       //!< len vert data obbox2
[5431]78
[7711]79    WorldEntity*        owner;
[9235]80
[4541]81};
82
83#endif /* _OBB_TREE_NODE_H */
Note: See TracBrowser for help on using the repository browser.