Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/ode/ode-0.9/OPCODE/OPC_SphereCollider.h @ 218

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

[Physik] add ode-0.9

File size: 4.7 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 a sphere collider.
12 *      \file           OPC_SphereCollider.h
13 *      \author         Pierre Terdiman
14 *      \date           June, 2, 2001
15 */
16///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
17
18///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19// Include Guard
20#ifndef __OPC_SPHERECOLLIDER_H__
21#define __OPC_SPHERECOLLIDER_H__
22
23        struct OPCODE_API SphereCache : VolumeCache
24        {
25                                        SphereCache() : Center(0.0f,0.0f,0.0f), FatRadius2(0.0f), FatCoeff(1.1f)        {}
26                                        ~SphereCache()                                                                                                                          {}
27
28                // Cached faces signature
29                Point           Center;         //!< Sphere used when performing the query resulting in cached faces
30                float           FatRadius2;     //!< Sphere used when performing the query resulting in cached faces
31                // User settings
32                float           FatCoeff;       //!< mRadius2 multiplier used to create a fat sphere
33        };
34
35        class OPCODE_API SphereCollider : public VolumeCollider
36        {
37                public:
38                // Constructor / Destructor
39                                                                                        SphereCollider();
40                virtual                                                         ~SphereCollider();
41
42                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
43                /**
44                 *      Generic collision query for generic OPCODE models. After the call, access the results:
45                 *      - with GetContactStatus()
46                 *      - with GetNbTouchedPrimitives()
47                 *      - with GetTouchedPrimitives()
48                 *
49                 *      \param          cache                   [in/out] a sphere cache
50                 *      \param          sphere                  [in] collision sphere in local space
51                 *      \param          model                   [in] Opcode model to collide with
52                 *      \param          worlds                  [in] sphere's world matrix, or null
53                 *      \param          worldm                  [in] model's world matrix, or null
54                 *      \return         true if success
55                 *      \warning        SCALE NOT SUPPORTED. The matrices must contain rotation & translation parts only.
56                 */
57                ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
58                                                        bool                    Collide(SphereCache& cache, const Sphere& sphere, const Model& model, const Matrix4x4* worlds=null, const Matrix4x4* worldm=null);
59
60                //
61                                                        bool                    Collide(SphereCache& cache, const Sphere& sphere, const AABBTree* tree);
62                protected:
63                // Sphere in model space
64                                                        Point                   mCenter;                        //!< Sphere center
65                                                        float                   mRadius2;                       //!< Sphere radius squared
66                // Internal methods
67                                                        void                    _Collide(const AABBCollisionNode* node);
68                                                        void                    _Collide(const AABBNoLeafNode* node);
69                                                        void                    _Collide(const AABBQuantizedNode* node);
70                                                        void                    _Collide(const AABBQuantizedNoLeafNode* node);
71                                                        void                    _Collide(const AABBTreeNode* node);
72                                                        void                    _CollideNoPrimitiveTest(const AABBCollisionNode* node);
73                                                        void                    _CollideNoPrimitiveTest(const AABBNoLeafNode* node);
74                                                        void                    _CollideNoPrimitiveTest(const AABBQuantizedNode* node);
75                                                        void                    _CollideNoPrimitiveTest(const AABBQuantizedNoLeafNode* node);
76                        // Overlap tests
77                inline_                         BOOL                    SphereContainsBox(const Point& bc, const Point& be);
78                inline_                         BOOL                    SphereAABBOverlap(const Point& center, const Point& extents);
79                                                        BOOL                    SphereTriOverlap(const Point& vert0, const Point& vert1, const Point& vert2);
80                        // Init methods
81                                                        BOOL                    InitQuery(SphereCache& cache, const Sphere& sphere, const Matrix4x4* worlds=null, const Matrix4x4* worldm=null);
82        };
83
84        class OPCODE_API HybridSphereCollider : public SphereCollider
85        {
86                public:
87                // Constructor / Destructor
88                                                                                        HybridSphereCollider();
89                virtual                                                         ~HybridSphereCollider();
90
91                                                        bool                    Collide(SphereCache& cache, const Sphere& sphere, const HybridModel& model, const Matrix4x4* worlds=null, const Matrix4x4* worldm=null);
92                protected:
93                                                        Container               mTouchedBoxes;
94        };
95
96#endif // __OPC_SPHERECOLLIDER_H__
Note: See TracBrowser for help on using the repository browser.