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