Cafu Engine
CollisionModel_static.hpp
1 /*
2 Cafu Engine, http://www.cafu.de/
3 Copyright (c) Carsten Fuchs and other contributors.
4 This project is licensed under the terms of the MIT license.
5 */
6 
7 #ifndef CAFU_CLIPSYS_COLLISION_MODEL_STATIC_HPP_INCLUDED
8 #define CAFU_CLIPSYS_COLLISION_MODEL_STATIC_HPP_INCLUDED
9 
10 #include "CollisionModel_base.hpp"
11 #include "Templates/Array.hpp"
12 #include "Templates/Pool.hpp"
13 
14 
15 namespace cf { struct MapFileEntityT; }
16 class MaterialT;
17 class TerrainT;
18 
19 
20 namespace cf
21 {
22  namespace ClipSys
23  {
24  /// This class represents a static collision model.
26  {
27  public:
28 
29  class InternalTraceSolidT;
30  class TraceParamsT;
31 
32 
33  class PolygonT
34  {
35  public:
36 
37  /// The default constructor.
38  PolygonT();
39 
40  /// The constructor.
41  PolygonT(CollisionModelStaticT* Parent_, MaterialT* Material_, unsigned long A, unsigned long B, unsigned long C, unsigned long D = 0xFFFFFFFF);
42 
43 
44  bool IsTriangle() const { return Vertices[3] == 0xFFFFFFFF; }
45 
46  BoundingBox3dT GetBB() const;
47 
48  void TraceConvexSolid(const InternalTraceSolidT& TraceSolid, const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const;
49 
50  void TraceRay(const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const;
51 
52 
53  CollisionModelStaticT* Parent;
54  unsigned long Vertices[4]; ///< The indices of the vertices that define the triangle or quad, respectively, referring into the m_Vertices list.
55  MaterialT* Material; ///< The material on the surface of this polygon.
56  mutable unsigned long CheckCount; ///< Used in order to avoid processing things twice.
57  };
58 
59 
60  /// This class describes a brush (convex polyhedron) within a CollisionModelStaticT collision shape.
61  /// It is conceptually very similar to and has in fact been created from the Brush3T<double> class.
62  ///
63  /// Brushes participate in traces (collision tests) and are exclusively used for volume contents tests.
64  ///
65  /// Note that most members (all but CheckCount) could and should be declared "const" - if not for the
66  /// assignment operator that is required when storing elements of this class in ArrayT<>s.
67  class BrushT
68  {
69  public:
70 
71  struct SideT
72  {
73  Plane3dT Plane; ///< The plane of this side of the brush.
74  unsigned long* Vertices; ///< The vertex indices of this polygon, in clockwise (CW) order (same as in Polygon3T<T>). Vertices itself points into Parent->m_BrushSideVIs, which in turn gives indices into Parent->m_Vertices.
75  unsigned long NrOfVertices; ///< The number of vertices (or rather, vertex indices).
76  MaterialT* Material; ///< The material of this side of the brush.
77  };
78 
79  struct EdgeT
80  {
81  unsigned long A; ///< Index of the first vertex of this edge.
82  unsigned long B; ///< Index of the second vertex of this edge.
83  };
84 
85 
86  /// The default constructor.
87  BrushT();
88 
89  void CacheHullVerts() const;
90  void CacheHullEdges() const;
91 
92  /// Traces the given convex polyhedron from Start along Ray (up to the input value of Result.Fraction)
93  /// through the brush, and reports the first collision, if any.
94  /// For more detailed documentation, see CollisionModelT::TraceConvexSolid(), which has the same signature.
95  /// @see CollisionModelT::TraceConvexSolid()
96  /// @see TraceResultT
97  void TraceConvexSolid(const InternalTraceSolidT& TraceSolid, const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const;
98 
99  void TraceRay(const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const;
100 
101  void TraceBevelBB(const BoundingBox3dT& TraceBB, const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const;
102 
103 
104  CollisionModelStaticT* Parent;
105  SideT* Sides; ///< The sides of the brush (i.e. the planes whose intersection forms the brush). This points into Parent->m_BrushSides, the array of all sides of the collision shape the brush is a part of.
106  unsigned long NrOfSides; ///< How many sides the brush has.
107 
108  BoundingBox3dT BB; ///< The bounding box (of the vertices) of this brush.
109  unsigned long Contents; ///< The contents of this brush.
110  mutable unsigned long CheckCount; ///< Used in order to avoid processing things twice.
111 
112  // Dependent information that is allocated and computed only *on demand*.
113  // The "Hull" prefix is not to be taken literally, we could have used "Unique" as well.
114  mutable unsigned long* HullVerts; ///< The union of the vertex indices of the sides of this brush (i.e. the unique vertices whose convex hull forms the brush), referring into the m_Vertices list.
115  mutable unsigned long NrOfHullVerts; ///< The number of unique vertices (or rather, vertex indices).
116  mutable EdgeT* HullEdges; ///< The unique edges of this brush (e.g. edge <A, B> is not stored again as edge <B, A>).
117  mutable unsigned long NrOfHullEdges; ///< The number of unique edges (or rather, edge indices).
118  };
119 
120 
122  {
123  public:
124 
125  TerrainRefT();
126  TerrainRefT(const TerrainT* Terrain_, MaterialT* Material_, const BoundingBox3dT& BB_);
127 
128 
129  const TerrainT* Terrain; ///< The pointer to the actual terrain instance this class is referring to. The instances are kept "outside", as they are shared with the graphics world (scene graph).
130  MaterialT* Material; ///< The material on the surface of this terrain.
131  BoundingBox3dT BB; ///< The bounding box of this terrain.
132  mutable unsigned long CheckCount; ///< Used in order to avoid processing things twice.
133  };
134 
135 
136  class NodeT
137  {
138  public:
139 
140  /// As the nodes of an octree are not subdivided by arbitrary planes, but only by planes that are parallel
141  /// to the three major axes, we do not store a full Plane3dT member with the nodes, but only a "compacted"
142  /// representation:
143  /// The type expresses which axes the plane is parallel to, the distance is the offset from the origin.
145  {
146  NONE = -1, ///< No plane at all. Used for nodes that are actually leaves.
147  ALONG_X, ///< A plane with normal vector (1, 0, 0), parallel to the y- and z-axis.
148  ALONG_Y, ///< A plane with normal vector (0, 1, 0), parallel to the x- and z-axis.
149  ALONG_Z ///< A plane with normal vector (0, 0, 1), parallel to the x- and y-axis.
150  };
151 
152 
153  /// The default constructor.
154  /// Note that NodeTs are managed by cf::PoolTs, and thus it makes no sense to have anything but a default ctor.
155  NodeT() : PlaneType(NONE), PlaneDist(0.0), Parent(NULL)
156  {
157  Children[0] = NULL;
158  Children[1] = NULL;
159  }
160 
161  /// Returns the bounding box of all contents (polygons, brushes, terrains) of this node.
162  BoundingBox3dT GetBB() const;
163 
164  /// Returns the contents (the union of the contents of all polygons, brushes and terrains) of this node.
165  unsigned long GetContents() const;
166 
167  /// Determines an axis-aligned split plane for further BSP partitioning of the contents of this node.
168  /// For choosing the split plane, the method considers the bounding-box planes of all objects (polygons, brushes, terrains)
169  /// of this node and all its ancestors, provided that they are wholly or partially in BB.
170  /// When a split plane was found, the PlaneType and PlaneDist members are appropriately set and true is returned,
171  /// otherwise they are initialized with NONE and 0, respectively, and the return value is false.
172  ///
173  /// @param NodeBB The relevant bounds in which a split plane is to be found from the contents of this node (plus ancestors).
174  /// @param MIN_NODE_SIZE The minimum size (side length) that a node should not fall below.
175  ///
176  /// @returns whether a split plane has successfully been determined.
177  bool DetermineSplitPlane(const BoundingBox3dT& NodeBB, const double MIN_NODE_SIZE);
178 
179  /// Determines whether the given BB intersects (is partly inside) each child of this node.
180  /// @param BB The bounding box that is tested for intersection.
181  bool IntersectsAllChildren(const BoundingBox3dT& BB) const;
182 
183  /// Traces an object along a line segment through the tree that is rooted at this node.
184  /// The line segment is defined by the points Start and Start+Ray == End.
185  /// The parameters to this method specify a sub-segment of the line through Start and End as follows:
186  /// A = Start + Ray*FracA
187  /// B = Start + Ray*FracB
188  /// This is mostly important for the recursive implementation of this method, you typically just call it like:
189  /// Trace(Start, End, 0, 1, Params);
190  void Trace(const Vector3dT& A, const Vector3dT& B, double FracA, double FracB, const TraceParamsT& Params) const;
191 
192  /// Recursively inserts the given polygon into the (sub-)tree at and below this node.
193  void Insert(const PolygonT* Poly);
194 
195  /// Recursively inserts the given brush into the (sub-)tree at and below this node.
196  void Insert(const BrushT* Brush);
197 
198  /// Recursively inserts the given terrain into the (sub-)tree at and below this node.
199  void Insert(const TerrainRefT* Terrain);
200 
201 
202  PlaneTypeE PlaneType; ///< The type of the plane that subdivides this node (no plane at all, normal vector along the x-, y- or z-axis).
203  double PlaneDist; ///< The distance of the plane to the origin. Corresponds to the Plane3fT::Dist member in a full plane.
204  NodeT* Parent; ///< The parent of this node, NULL if this is the root node.
205  NodeT* Children[2]; ///< The children of this node at each side of the plane (NULL if there is no plane / the node is a leaf).
206  ArrayT<const PolygonT*> Polygons; ///< The list of polygons in this node (used for traces, never for contents tests).
207  ArrayT<const BrushT*> Brushes; ///< The list of brushes in this node (brushes are both for traces and contents tests).
208  ArrayT<const TerrainRefT*> Terrains; ///< The list of terrains in this node (used for traces, never for contents tests).
209  };
210 
211 
212  public:
213 
214  // CollisionModelStaticT(const std::string& Name_="");
215 
216  /// Constructor for creating a collision model by loading it from a file.
217  /// TODO 1: Name should probably be a part of the InFile data...?
218  /// TODO 2: Review serialization/deser. of class hierarchies (e.g. compare to cf::SceneGraph)!
219  /// Right now this is fixed and works for CollisionModelStaticTs only!!!
220  CollisionModelStaticT(std::istream& InFile, cf::SceneGraph::aux::PoolT& Pool, const ArrayT<TerrainRefT>& Terrains);
221 
222  /// Constructor for creating a collision model from the brushes and patches of a MapFileEntityT.
223  ///
224  /// @param Entity The entity to create the collision model from.
225  /// @param Terrains The pool of references to shared terrain instances.
226  /// @param UseGenericBrushes Whether generic brushes should be used, or variants with precomputed bevel planes.
227  /// When false, internally the same code that has been used in the Cafu engine for years
228  /// (in the cf::SceneGraph::BspTreeNodeT class) is used, and is thus *very* fast, rock solid and battle proven.
229  /// It also means that internally, only bounding-boxes (but not the true TraceSolidT objects) are traced against
230  /// such created brushes with the BrushT::TraceBevelBB() method.
231  /// @param MAP_ROUND_EPSILON The epsilon value used in roundoff error checks.
232  /// @param MAP_MIN_VERTEX_DIST The minimum distance between two vertices.
233  /// @param BP_MAX_CURVE_ERROR The maximum deviation of a segment against its true shape in an auto-segmented curve.
234  /// @param BP_MAX_CURVE_LENGTH The maximum length of a segment in an auto-segmented curve.
235  /// @param MIN_NODE_SIZE The minimum size (side length) that a node should not fall below.
236  CollisionModelStaticT(const MapFileEntityT& Entity, const ArrayT<TerrainRefT>& Terrains, bool UseGenericBrushes,
237  const double MAP_ROUND_EPSILON, const double MAP_MIN_VERTEX_DIST, const double BP_MAX_CURVE_ERROR, const double BP_MAX_CURVE_LENGTH, const double MIN_NODE_SIZE);
238 
239  /// Constructor for creating a collision model from a regular mesh.
240  CollisionModelStaticT(unsigned long Width, unsigned long Height, const ArrayT<Vector3dT>& Mesh, MaterialT* Material, const double MIN_NODE_SIZE);
241 
242  /// The destructor.
244 
245 
246  // The CollisionModelT interface.
247  BoundingBox3dT GetBoundingBox() const override;
248  unsigned long GetContents() const override;
249  void SaveToFile(std::ostream& OutFile, SceneGraph::aux::PoolT& Pool) const override;
250  void TraceConvexSolid(const TraceSolidT& TraceSolid, const Vector3dT& Start, const Vector3dT& Ray, unsigned long ClipMask, TraceResultT& Result) const override;
251  unsigned long GetContents(const Vector3dT& Point, double BoxRadius, unsigned long ContMask) const override;
252  btCollisionShape* GetBulletAdapter() const override;
253 
254 
255  private:
256 
257  // Forward-declaration of an adapter class that allows the Bullet Physics Library to use this class as a btConcaveShape.
258  class BulletAdapterT;
259 
260  static unsigned long s_CheckCount; ///< Used in order to avoid checking things more than once.
261 
262  CollisionModelStaticT(const CollisionModelStaticT&); ///< Use of the Copy Constructor is not allowed.
263  void operator = (const CollisionModelStaticT&); ///< Use of the Assignment Operator is not allowed.
264 
265  /// Auxiliary method for constructing a CollisionModelStaticT instance (called by the constructors).
266  void BuildAxialBSPTree(NodeT* Node, const BoundingBox3dT& NodeBB, const double MIN_NODE_SIZE);
267 
268  // Memory pools from which we allocate our objects.
269  // Memory pools allow the *quick* allocation of unknown many but large quantities of *individual* objects.
270  cf::PoolNoFreeT<NodeT> m_NodesPool; ///< All the nodes of the orthogonal BSP tree of this model.
271  cf::PoolNoFreeT<unsigned long> m_VerticesPool; ///< The pool of vertex indices for the brushes.
272  cf::PoolNoFreeT<BrushT::EdgeT> m_EdgesPool; ///< The pool of edge indices for the brushes.
273 
274  // The data members that define a collision model.
275  std::string m_Name; ///< The name of this model.
276  BoundingBox3dT m_BB; ///< The spatial bounds of this model, caches the result of m_RootNode->GetBB().
277  unsigned long m_Contents; ///< The contents flags of all model surfaces or'ed together, caches the result of m_RootNode->GetContents().
278  NodeT* m_RootNode; ///< The root node of the orthogonal BSP tree of this model.
279  BulletAdapterT* m_BulletAdapter; ///< The bullet adapter class instance that allows this class to be used as a btCollisionShape.
280 
281  ArrayT<PolygonT> m_Polygons; ///< The list of all polygons in this collision shape. Allocated (sized) only once, then never changed throughout the lifetime of this collision shape, so that pointers into it don't become invalid.
282  bool m_GenericBrushes; ///< Whether our brushes are generic (the "normal" case), or whether they have precomputed bevel planes and can be used with bounding-boxes only.
283  ArrayT<BrushT> m_Brushes; ///< The list of all brushes in this collision shape. Allocated (sized) only once, then never changed throughout the lifetime of this collision shape, so that pointers into it don't become invalid.
284  ArrayT<BrushT::SideT> m_BrushSides; ///< The list of all brush sides used in the brushes of this collision shape (BrushT::Sides points into this array). Allocated (sized) only once, then never changed throughout the lifetime of this collision shape, so that pointers into it don't become invalid.
285  ArrayT<unsigned long> m_BrushSideVIs; ///< The list of all vertex indices used in the brushes sides (BrushT::SideT::Vertices points into this array). Allocated (sized) only once, then never changed throughout the lifetime of this collision shape, so that pointers into it don't become invalid.
286  ArrayT<Vector3dT> m_Vertices; ///< The list of all vertices in this model, shared by brushes and polygons.
287  ArrayT<TerrainRefT> m_Terrains; ///< The list of all terrains in this model.
288  };
289  }
290 }
291 
292 #endif
unsigned long NrOfHullEdges
The number of unique edges (or rather, edge indices).
Definition: CollisionModel_static.hpp:117
PolygonT()
The default constructor.
Definition: CollisionModel_static.cpp:104
ArrayT< const BrushT * > Brushes
The list of brushes in this node (brushes are both for traces and contents tests).
Definition: CollisionModel_static.hpp:207
CollisionModelStaticT(std::istream &InFile, cf::SceneGraph::aux::PoolT &Pool, const ArrayT< TerrainRefT > &Terrains)
Constructor for creating a collision model by loading it from a file.
Definition: CollisionModel_static.cpp:1341
This class represents terrains, offering methods for LoD rendering and collision detection.
Definition: Terrain.hpp:17
unsigned long NrOfHullVerts
The number of unique vertices (or rather, vertex indices).
Definition: CollisionModel_static.hpp:115
BrushT()
The default constructor.
Definition: CollisionModel_static.cpp:324
Definition: _aux.hpp:111
This class represents a solid object that can be traced through collision worlds, models and shapes...
Definition: TraceSolid.hpp:30
PlaneTypeE
As the nodes of an octree are not subdivided by arbitrary planes, but only by planes that are paralle...
Definition: CollisionModel_static.hpp:144
This class describes a brush (convex polyhedron) within a CollisionModelStaticT collision shape...
Definition: CollisionModel_static.hpp:67
btCollisionShape * GetBulletAdapter() const override
Returns an adapter class for using CollisionModelT instances also as Bullet btCollisionShape instance...
Definition: CollisionModel_static.cpp:2244
unsigned long Contents
The contents of this brush.
Definition: CollisionModel_static.hpp:109
BoundingBox3dT BB
The bounding box of this terrain.
Definition: CollisionModel_static.hpp:131
Definition: MapFile.hpp:145
NodeT * Parent
The parent of this node, NULL if this is the root node.
Definition: CollisionModel_static.hpp:204
BoundingBox3dT GetBB() const
Returns the bounding box of all contents (polygons, brushes, terrains) of this node.
Definition: CollisionModel_static.cpp:852
unsigned long CheckCount
Used in order to avoid processing things twice.
Definition: CollisionModel_static.hpp:110
No plane at all. Used for nodes that are actually leaves.
Definition: CollisionModel_static.hpp:146
MaterialT * Material
The material of this side of the brush.
Definition: CollisionModel_static.hpp:76
Plane3dT Plane
The plane of this side of the brush.
Definition: CollisionModel_static.hpp:73
unsigned long NrOfSides
How many sides the brush has.
Definition: CollisionModel_static.hpp:106
Definition: CollisionModel_static.hpp:33
MaterialT * Material
The material on the surface of this polygon.
Definition: CollisionModel_static.hpp:55
unsigned long * HullVerts
The union of the vertex indices of the sides of this brush (i.e. the unique vertices whose convex hul...
Definition: CollisionModel_static.hpp:114
void TraceConvexSolid(const TraceSolidT &TraceSolid, const Vector3dT &Start, const Vector3dT &Ray, unsigned long ClipMask, TraceResultT &Result) const override
Traces the given TraceSolidT instance from Start along Ray (up to the input value of Result...
Definition: CollisionModel_static.cpp:2172
void SaveToFile(std::ostream &OutFile, SceneGraph::aux::PoolT &Pool) const override
Saves the model to OutFile.
Definition: CollisionModel_static.cpp:2044
This class represents a surface material ("A datastructural representation of a scripts material def...
Definition: Material.hpp:22
~CollisionModelStaticT()
The destructor.
Definition: CollisionModel_static.cpp:2023
unsigned long CheckCount
Used in order to avoid processing things twice.
Definition: CollisionModel_static.hpp:132
void Trace(const Vector3dT &A, const Vector3dT &B, double FracA, double FracB, const TraceParamsT &Params) const
Traces an object along a line segment through the tree that is rooted at this node.
Definition: CollisionModel_static.cpp:1063
unsigned long B
Index of the second vertex of this edge.
Definition: CollisionModel_static.hpp:82
This class provides an adapter for CollisionModelStaticT instances to be used as btConcaveShape insta...
Definition: CollisionModel_static_BulletAdapter.hpp:25
unsigned long Vertices[4]
The indices of the vertices that define the triangle or quad, respectively, referring into the m_Vert...
Definition: CollisionModel_static.hpp:54
unsigned long GetContents() const override
Returns the contents of this collision model.
Definition: CollisionModel_static.cpp:2038
bool IntersectsAllChildren(const BoundingBox3dT &BB) const
Determines whether the given BB intersects (is partly inside) each child of this node.
Definition: CollisionModel_static.cpp:905
This class describes the result of tracing an object (a ray, a bounding-box, or a convex solid) throu...
Definition: TraceResult.hpp:36
This representation of a TraceSolidT is used in the implementation of CollisionModelStaticT as a perf...
Definition: CollisionModel_static.cpp:40
ArrayT< const TerrainRefT * > Terrains
The list of terrains in this node (used for traces, never for contents tests).
Definition: CollisionModel_static.hpp:208
This is the base class for collision models, defining their common interface.
Definition: CollisionModel_base.hpp:29
This class represents a static collision model.
Definition: CollisionModel_static.hpp:25
unsigned long CheckCount
Used in order to avoid processing things twice.
Definition: CollisionModel_static.hpp:56
Definition: CollisionModel_static.cpp:78
const TerrainT * Terrain
The pointer to the actual terrain instance this class is referring to. The instances are kept "outsid...
Definition: CollisionModel_static.hpp:129
NodeT()
The default constructor.
Definition: CollisionModel_static.hpp:155
void Insert(const PolygonT *Poly)
Recursively inserts the given polygon into the (sub-)tree at and below this node. ...
Definition: CollisionModel_static.cpp:1208
Definition: CollisionModel_static.hpp:79
NodeT * Children[2]
The children of this node at each side of the plane (NULL if there is no plane / the node is a leaf)...
Definition: CollisionModel_static.hpp:205
PlaneTypeE PlaneType
The type of the plane that subdivides this node (no plane at all, normal vector along the x-...
Definition: CollisionModel_static.hpp:202
SideT * Sides
The sides of the brush (i.e. the planes whose intersection forms the brush). This points into Parent-...
Definition: CollisionModel_static.hpp:105
EdgeT * HullEdges
The unique edges of this brush (e.g. edge <A, B> is not stored again as edge <B, A>).
Definition: CollisionModel_static.hpp:116
A plane with normal vector (0, 0, 1), parallel to the x- and y-axis.
Definition: CollisionModel_static.hpp:149
unsigned long GetContents() const
Returns the contents (the union of the contents of all polygons, brushes and terrains) of this node...
Definition: CollisionModel_static.cpp:884
double PlaneDist
The distance of the plane to the origin. Corresponds to the Plane3fT::Dist member in a full plane...
Definition: CollisionModel_static.hpp:203
A plane with normal vector (1, 0, 0), parallel to the y- and z-axis.
Definition: CollisionModel_static.hpp:147
BoundingBox3dT GetBoundingBox() const override
Returns the bounding box of this collision model.
Definition: CollisionModel_static.cpp:2032
unsigned long NrOfVertices
The number of vertices (or rather, vertex indices).
Definition: CollisionModel_static.hpp:75
bool DetermineSplitPlane(const BoundingBox3dT &NodeBB, const double MIN_NODE_SIZE)
Determines an axis-aligned split plane for further BSP partitioning of the contents of this node...
Definition: CollisionModel_static.cpp:920
MaterialT * Material
The material on the surface of this terrain.
Definition: CollisionModel_static.hpp:130
unsigned long A
Index of the first vertex of this edge.
Definition: CollisionModel_static.hpp:81
This class manages memory for a pool of objects.
Definition: Pool.hpp:19
Definition: CollisionModel_static.hpp:136
unsigned long * Vertices
The vertex indices of this polygon, in clockwise (CW) order (same as in Polygon3T<T>). Vertices itself points into Parent->m_BrushSideVIs, which in turn gives indices into Parent->m_Vertices.
Definition: CollisionModel_static.hpp:74
Definition: Renderer.hpp:16
ArrayT< const PolygonT * > Polygons
The list of polygons in this node (used for traces, never for contents tests).
Definition: CollisionModel_static.hpp:206
Definition: CollisionModel_static.hpp:71
BoundingBox3dT BB
The bounding box (of the vertices) of this brush.
Definition: CollisionModel_static.hpp:108
void TraceConvexSolid(const InternalTraceSolidT &TraceSolid, const Vector3dT &Start, const Vector3dT &Ray, unsigned long ClipMask, TraceResultT &Result) const
Traces the given convex polyhedron from Start along Ray (up to the input value of Result...
Definition: CollisionModel_static.cpp:424
A plane with normal vector (0, 1, 0), parallel to the x- and z-axis.
Definition: CollisionModel_static.hpp:148
Definition: CollisionModel_static.hpp:121