aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/ode-0.9/OPCODE/OPC_HybridModel.h
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/ode-0.9/OPCODE/OPC_HybridModel.h')
-rw-r--r--libraries/ode-0.9/OPCODE/OPC_HybridModel.h106
1 files changed, 106 insertions, 0 deletions
diff --git a/libraries/ode-0.9/OPCODE/OPC_HybridModel.h b/libraries/ode-0.9/OPCODE/OPC_HybridModel.h
new file mode 100644
index 0000000..c7eb59d
--- /dev/null
+++ b/libraries/ode-0.9/OPCODE/OPC_HybridModel.h
@@ -0,0 +1,106 @@
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 hybrid models.
12 * \file OPC_HybridModel.h
13 * \author Pierre Terdiman
14 * \date May, 18, 2003
15 */
16///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
17
18///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
19// Include Guard
20#ifndef __OPC_HYBRIDMODEL_H__
21#define __OPC_HYBRIDMODEL_H__
22
23 //! Leaf descriptor
24 struct LeafTriangles
25 {
26 udword Data; //!< Packed data
27
28 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
29 /**
30 * Gets number of triangles in the leaf.
31 * \return number of triangles N, with 0 < N <= 16
32 */
33 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
34 inline_ udword GetNbTriangles() const { return (Data & 15)+1; }
35
36 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
37 /**
38 * Gets triangle index for this leaf. Indexed model's array of indices retrieved with HybridModel::GetIndices()
39 * \return triangle index
40 */
41 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
42 inline_ udword GetTriangleIndex() const { return Data>>4; }
43 inline_ void SetData(udword nb, udword index) { ASSERT(nb>0 && nb<=16); nb--; Data = (index<<4)|(nb&15); }
44 };
45
46 class OPCODE_API HybridModel : public BaseModel
47 {
48 public:
49 // Constructor/Destructor
50 HybridModel();
51 virtual ~HybridModel();
52
53 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
54 /**
55 * Builds a collision model.
56 * \param create [in] model creation structure
57 * \return true if success
58 */
59 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
60 override(BaseModel) bool Build(const OPCODECREATE& create);
61
62 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
63 /**
64 * Gets the number of bytes used by the tree.
65 * \return amount of bytes used
66 */
67 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
68 override(BaseModel) udword GetUsedBytes() const;
69
70 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
71 /**
72 * Refits the collision model. This can be used to handle dynamic meshes. Usage is:
73 * 1. modify your mesh vertices (keep the topology constant!)
74 * 2. refit the tree (call this method)
75 * \return true if success
76 */
77 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
78 override(BaseModel) bool Refit();
79
80 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
81 /**
82 * Gets array of triangles.
83 * \return array of triangles
84 */
85 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
86 inline_ const LeafTriangles* GetLeafTriangles() const { return mTriangles; }
87
88 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
89 /**
90 * Gets array of indices.
91 * \return array of indices
92 */
93 ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
94 inline_ const udword* GetIndices() const { return mIndices; }
95
96 private:
97 udword mNbLeaves; //!< Number of leaf nodes in the model
98 LeafTriangles* mTriangles; //!< Array of mNbLeaves leaf descriptors
99 udword mNbPrimitives; //!< Number of primitives in the model
100 udword* mIndices; //!< Array of primitive indices
101
102 // Internal methods
103 void Release();
104 };
105
106#endif // __OPC_HYBRIDMODEL_H__