Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/OPCODE/OPC_AABBCollider.h @ 216

Last change on this file since 216 was 216, checked in by mathiask, 17 years ago

[Physik] add ode-0.9

File size: 4.3 KB
Line 
1///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2/*
3 *      OPCODE - Optimized Collision Detection
4 *      Copyright (C) 2001 Pierre Terdiman
5 *      Homepage: http://www.codercorner.com/Opcode.htm
6 */
7///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
8
9///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
10/**
11 *      Contains code for an AABB collider.
12 *      \file           OPC_AABBCollider.h
13 *      \author         Pierre Terdiman
14 *      \date           January, 1st, 2002
15 */
16///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
17
18///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19// Include Guard
20#ifndef __OPC_AABBCOLLIDER_H__
21#define __OPC_AABBCOLLIDER_H__
22
23        struct OPCODE_API AABBCache : VolumeCache
24        {
25                                                AABBCache() : FatCoeff(1.1f)
26                                                {
27                                                        FatBox.mCenter.Zero();
28                                                        FatBox.mExtents.Zero();
29                                                }
30
31                // Cached faces signature
32                CollisionAABB   FatBox;         //!< Box used when performing the query resulting in cached faces
33                // User settings
34                float                   FatCoeff;       //!< mRadius2 multiplier used to create a fat sphere
35        };
36
37        class OPCODE_API AABBCollider : public VolumeCollider
38        {
39                public:
40                // Constructor / Destructor
41                                                                                        AABBCollider();
42                virtual                                                         ~AABBCollider();
43
44                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
45                /**
46                 *      Generic collision query for generic OPCODE models. After the call, access the results:
47                 *      - with GetContactStatus()
48                 *      - with GetNbTouchedPrimitives()
49                 *      - with GetTouchedPrimitives()
50                 *
51                 *      \param          cache                   [in/out] a box cache
52                 *      \param          box                             [in] collision AABB in world space
53                 *      \param          model                   [in] Opcode model to collide with
54                 *      \return         true if success
55                 *      \warning        SCALE NOT SUPPORTED. The matrices must contain rotation & translation parts only.
56                 */
57                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
58                                                        bool                    Collide(AABBCache& cache, const CollisionAABB& box, const Model& model);
59                //
60                                                        bool                    Collide(AABBCache& cache, const CollisionAABB& box, const AABBTree* tree);
61                protected:
62                                                        CollisionAABB   mBox;                   //!< Query box in (center, extents) form
63                                                        Point                   mMin;                   //!< Query box min point
64                                                        Point                   mMax;                   //!< Query box max point
65                // Leaf description
66                                                        Point                   mLeafVerts[3];  //!< Triangle vertices
67                // Internal methods
68                                                        void                    _Collide(const AABBCollisionNode* node);
69                                                        void                    _Collide(const AABBNoLeafNode* node);
70                                                        void                    _Collide(const AABBQuantizedNode* node);
71                                                        void                    _Collide(const AABBQuantizedNoLeafNode* node);
72                                                        void                    _Collide(const AABBTreeNode* node);
73                                                        void                    _CollideNoPrimitiveTest(const AABBCollisionNode* node);
74                                                        void                    _CollideNoPrimitiveTest(const AABBNoLeafNode* node);
75                                                        void                    _CollideNoPrimitiveTest(const AABBQuantizedNode* node);
76                                                        void                    _CollideNoPrimitiveTest(const AABBQuantizedNoLeafNode* node);
77                        // Overlap tests
78                inline_                         BOOL                    AABBContainsBox(const Point& bc, const Point& be);
79                inline_                         BOOL                    AABBAABBOverlap(const Point& b, const Point& Pb);
80                inline_                         BOOL                    TriBoxOverlap();
81                        // Init methods
82                                                        BOOL                    InitQuery(AABBCache& cache, const CollisionAABB& box);
83        };
84
85        class OPCODE_API HybridAABBCollider : public AABBCollider
86        {
87                public:
88                // Constructor / Destructor
89                                                                                        HybridAABBCollider();
90                virtual                                                         ~HybridAABBCollider();
91
92                                                        bool                    Collide(AABBCache& cache, const CollisionAABB& box, const HybridModel& model);
93                protected:
94                                                        Container               mTouchedBoxes;
95        };
96
97#endif // __OPC_AABBCOLLIDER_H__
Note: See TracBrowser for help on using the repository browser.