aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ode-0.9/OPCODE/OPC_SphereCollider.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ode-0.9/OPCODE/OPC_SphereCollider.h')
-rw-r--r--libraries/ode-0.9/OPCODE/OPC_SphereCollider.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/libraries/ode-0.9/OPCODE/OPC_SphereCollider.h b/libraries/ode-0.9/OPCODE/OPC_SphereCollider.h
new file mode 100644
index 0000000..ac6495e
--- /dev/null
+++ b/libraries/ode-0.9/OPCODE/OPC_SphereCollider.h
@@ -0,0 +1,96 @@
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__