Bullet Collision Detection & Physics Library
btConvexConcaveCollisionAlgorithm.cpp
Go to the documentation of this file.
1 /*
2 Bullet Continuous Collision Detection and Physics Library
3 Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4 
5 This software is provided 'as-is', without any express or implied warranty.
6 In no event will the authors be held liable for any damages arising from the use of this software.
7 Permission is granted to anyone to use this software for any purpose,
8 including commercial applications, and to alter it and redistribute it freely,
9 subject to the following restrictions:
10 
11 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
12 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
13 3. This notice may not be removed or altered from any source distribution.
14 */
15 
16 
18 #include "LinearMath/btQuickprof.h"
30 
32 : btActivatingCollisionAlgorithm(ci,body0Wrap,body1Wrap),
33 m_btConvexTriangleCallback(ci.m_dispatcher1,body0Wrap,body1Wrap,isSwapped),
34 m_isSwapped(isSwapped)
35 {
36 }
37 
39 {
40 }
41 
43 {
45  {
47  }
48 }
49 
50 
52  m_dispatcher(dispatcher),
53  m_dispatchInfoPtr(0)
54 {
55  m_convexBodyWrap = isSwapped? body1Wrap:body0Wrap;
56  m_triBodyWrap = isSwapped? body0Wrap:body1Wrap;
57 
58  //
59  // create the manifold from the dispatcher 'manifold pool'
60  //
62 
63  clearCache();
64 }
65 
67 {
68  clearCache();
70 
71 }
72 
73 
75 {
77 }
78 
79 
81 partId, int triangleIndex)
82 {
83  BT_PROFILE("btConvexTriangleCallback::processTriangle");
84 
86  {
87  return;
88  }
89 
90  //just for debugging purposes
91  //printf("triangle %d",m_triangleCount++);
92 
93 
94 
97 
98 
99 
100 #if 0
101 
104  {
106  btVector3 color(1,1,0);
107  btTransform& tr = ob->getWorldTransform();
108  m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]),tr(triangle[1]),color);
109  m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[1]),tr(triangle[2]),color);
110  m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[2]),tr(triangle[0]),color);
111  }
112 #endif
113 
115  {
116  btTriangleShape tm(triangle[0],triangle[1],triangle[2]);
118 
119 
120  btCollisionObjectWrapper triObWrap(m_triBodyWrap,&tm,m_triBodyWrap->getCollisionObject(),m_triBodyWrap->getWorldTransform(),partId,triangleIndex);//correct transform?
121  btCollisionAlgorithm* colAlgo = 0;
122 
124  {
126  }
127  else
128  {
130  }
131  const btCollisionObjectWrapper* tmpWrap = 0;
132 
134  {
135  tmpWrap = m_resultOut->getBody0Wrap();
136  m_resultOut->setBody0Wrap(&triObWrap);
137  m_resultOut->setShapeIdentifiersA(partId,triangleIndex);
138  }
139  else
140  {
141  tmpWrap = m_resultOut->getBody1Wrap();
142  m_resultOut->setBody1Wrap(&triObWrap);
143  m_resultOut->setShapeIdentifiersB(partId,triangleIndex);
144  }
145 
147 
149  {
150  m_resultOut->setBody0Wrap(tmpWrap);
151  } else
152  {
153  m_resultOut->setBody1Wrap(tmpWrap);
154  }
155 
156 
157 
158  colAlgo->~btCollisionAlgorithm();
160  }
161 
162 }
163 
164 
165 
166 void btConvexTriangleCallback::setTimeStepAndCounters(btScalar collisionMarginTriangle,const btDispatcherInfo& dispatchInfo,const btCollisionObjectWrapper* convexBodyWrap, const btCollisionObjectWrapper* triBodyWrap, btManifoldResult* resultOut)
167 {
168  m_convexBodyWrap = convexBodyWrap;
169  m_triBodyWrap = triBodyWrap;
170 
171  m_dispatchInfoPtr = &dispatchInfo;
172  m_collisionMarginTriangle = collisionMarginTriangle;
173  m_resultOut = resultOut;
174 
175  //recalc aabbs
176  btTransform convexInTriangleSpace;
178  const btCollisionShape* convexShape = static_cast<const btCollisionShape*>(m_convexBodyWrap->getCollisionShape());
179  //CollisionShape* triangleShape = static_cast<btCollisionShape*>(triBody->m_collisionShape);
180  convexShape->getAabb(convexInTriangleSpace,m_aabbMin,m_aabbMax);
181  btScalar extraMargin = collisionMarginTriangle+ resultOut->m_closestPointDistanceThreshold;
182 
183  btVector3 extra(extraMargin,extraMargin,extraMargin);
184 
185  m_aabbMax += extra;
186  m_aabbMin -= extra;
187 
188 }
189 
191 {
193 
194 }
195 
197 {
198  BT_PROFILE("btConvexConcaveCollisionAlgorithm::processCollision");
199 
200  const btCollisionObjectWrapper* convexBodyWrap = m_isSwapped ? body1Wrap : body0Wrap;
201  const btCollisionObjectWrapper* triBodyWrap = m_isSwapped ? body0Wrap : body1Wrap;
202 
203  if (triBodyWrap->getCollisionShape()->isConcave())
204  {
205 
206 
207 
208  const btConcaveShape* concaveShape = static_cast<const btConcaveShape*>( triBodyWrap->getCollisionShape());
209 
210  if (convexBodyWrap->getCollisionShape()->isConvex())
211  {
212  btScalar collisionMarginTriangle = concaveShape->getMargin();
213 
215  m_btConvexTriangleCallback.setTimeStepAndCounters(collisionMarginTriangle,dispatchInfo,convexBodyWrap,triBodyWrap,resultOut);
216 
218 
220 
221  resultOut->refreshContactPoints();
222 
224 
225  }
226 
227  }
228 
229 }
230 
231 
233 {
234  (void)resultOut;
235  (void)dispatchInfo;
236  btCollisionObject* convexbody = m_isSwapped ? body1 : body0;
237  btCollisionObject* triBody = m_isSwapped ? body0 : body1;
238 
239 
240  //quick approximation using raycast, todo: hook up to the continuous collision detection (one of the btConvexCast)
241 
242  //only perform CCD above a certain threshold, this prevents blocking on the long run
243  //because object in a blocked ccd state (hitfraction<1) get their linear velocity halved each frame...
244  btScalar squareMot0 = (convexbody->getInterpolationWorldTransform().getOrigin() - convexbody->getWorldTransform().getOrigin()).length2();
245  if (squareMot0 < convexbody->getCcdSquareMotionThreshold())
246  {
247  return btScalar(1.);
248  }
249 
250  //const btVector3& from = convexbody->m_worldTransform.getOrigin();
251  //btVector3 to = convexbody->m_interpolationWorldTransform.getOrigin();
252  //todo: only do if the motion exceeds the 'radius'
253 
254  btTransform triInv = triBody->getWorldTransform().inverse();
255  btTransform convexFromLocal = triInv * convexbody->getWorldTransform();
256  btTransform convexToLocal = triInv * convexbody->getInterpolationWorldTransform();
257 
258  struct LocalTriangleSphereCastCallback : public btTriangleCallback
259  {
260  btTransform m_ccdSphereFromTrans;
261  btTransform m_ccdSphereToTrans;
262  btTransform m_meshTransform;
263 
264  btScalar m_ccdSphereRadius;
265  btScalar m_hitFraction;
266 
267 
268  LocalTriangleSphereCastCallback(const btTransform& from,const btTransform& to,btScalar ccdSphereRadius,btScalar hitFraction)
269  :m_ccdSphereFromTrans(from),
270  m_ccdSphereToTrans(to),
271  m_ccdSphereRadius(ccdSphereRadius),
272  m_hitFraction(hitFraction)
273  {
274  }
275 
276 
277  virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
278  {
279  BT_PROFILE("processTriangle");
280  (void)partId;
281  (void)triangleIndex;
282  //do a swept sphere for now
283  btTransform ident;
284  ident.setIdentity();
285  btConvexCast::CastResult castResult;
286  castResult.m_fraction = m_hitFraction;
287  btSphereShape pointShape(m_ccdSphereRadius);
288  btTriangleShape triShape(triangle[0],triangle[1],triangle[2]);
289  btVoronoiSimplexSolver simplexSolver;
290  btSubsimplexConvexCast convexCaster(&pointShape,&triShape,&simplexSolver);
291  //GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
292  //ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
293  //local space?
294 
295  if (convexCaster.calcTimeOfImpact(m_ccdSphereFromTrans,m_ccdSphereToTrans,
296  ident,ident,castResult))
297  {
298  if (m_hitFraction > castResult.m_fraction)
299  m_hitFraction = castResult.m_fraction;
300  }
301 
302  }
303 
304  };
305 
306 
307 
308 
309 
310  if (triBody->getCollisionShape()->isConcave())
311  {
312  btVector3 rayAabbMin = convexFromLocal.getOrigin();
313  rayAabbMin.setMin(convexToLocal.getOrigin());
314  btVector3 rayAabbMax = convexFromLocal.getOrigin();
315  rayAabbMax.setMax(convexToLocal.getOrigin());
316  btScalar ccdRadius0 = convexbody->getCcdSweptSphereRadius();
317  rayAabbMin -= btVector3(ccdRadius0,ccdRadius0,ccdRadius0);
318  rayAabbMax += btVector3(ccdRadius0,ccdRadius0,ccdRadius0);
319 
320  btScalar curHitFraction = btScalar(1.); //is this available?
321  LocalTriangleSphereCastCallback raycastCallback(convexFromLocal,convexToLocal,
322  convexbody->getCcdSweptSphereRadius(),curHitFraction);
323 
324  raycastCallback.m_hitFraction = convexbody->getHitFraction();
325 
326  btCollisionObject* concavebody = triBody;
327 
328  btConcaveShape* triangleMesh = (btConcaveShape*) concavebody->getCollisionShape();
329 
330  if (triangleMesh)
331  {
332  triangleMesh->processAllTriangles(&raycastCallback,rayAabbMin,rayAabbMax);
333  }
334 
335 
336 
337  if (raycastCallback.m_hitFraction < convexbody->getHitFraction())
338  {
339  convexbody->setHitFraction( raycastCallback.m_hitFraction);
340  return raycastCallback.m_hitFraction;
341  }
342  }
343 
344  return btScalar(1.);
345 
346 }
btConvexConcaveCollisionAlgorithm::m_isSwapped
bool m_isSwapped
Definition: btConvexConcaveCollisionAlgorithm.h:87
btConvexTriangleCallback::m_manifoldPtr
btPersistentManifold * m_manifoldPtr
Definition: btConvexConcaveCollisionAlgorithm.h:50
btManifoldResult::setShapeIdentifiersB
virtual void setShapeIdentifiersB(int partId1, int index1)
Definition: btManifoldResult.h:92
btCollisionObject
btCollisionObject can be used to manage collision detection objects.
Definition: btCollisionObject.h:49
btRaycastCallback.h
btConvexTriangleCallback::m_resultOut
btManifoldResult * m_resultOut
Definition: btConvexConcaveCollisionAlgorithm.h:40
BT_CLOSEST_POINT_ALGORITHMS
@ BT_CLOSEST_POINT_ALGORITHMS
Definition: btDispatcher.h:70
btTransform::inverse
btTransform inverse() const
Return the inverse of this transform.
Definition: btTransform.h:188
btConvexConcaveCollisionAlgorithm::~btConvexConcaveCollisionAlgorithm
virtual ~btConvexConcaveCollisionAlgorithm()
Definition: btConvexConcaveCollisionAlgorithm.cpp:38
btCollisionAlgorithm::~btCollisionAlgorithm
virtual ~btCollisionAlgorithm()
Definition: btCollisionAlgorithm.h:71
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
btSubSimplexConvexCast.h
btCollisionObjectWrapper.h
btCollisionObjectWrapper
Definition: btCollisionObjectWrapper.h:17
btDispatcher
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
Definition: btDispatcher.h:75
btConcaveShape
The btConcaveShape class provides an interface for non-moving (static) concave shapes.
Definition: btConcaveShape.h:36
btConvexTriangleCallback::m_dispatchInfoPtr
const btDispatcherInfo * m_dispatchInfoPtr
Definition: btConvexConcaveCollisionAlgorithm.h:42
btManifoldResult::getBody0Internal
const btCollisionObject * getBody0Internal() const
Definition: btManifoldResult.h:137
btManifoldResult::setBody1Wrap
void setBody1Wrap(const btCollisionObjectWrapper *obj1Wrap)
Definition: btManifoldResult.h:132
btConvexConcaveCollisionAlgorithm::btConvexConcaveCollisionAlgorithm
btConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
Definition: btConvexConcaveCollisionAlgorithm.cpp:31
btConcaveShape.h
btConvexTriangleCallback::m_convexBodyWrap
const btCollisionObjectWrapper * m_convexBodyWrap
Definition: btConvexConcaveCollisionAlgorithm.h:35
btIDebugDraw::getDebugMode
virtual int getDebugMode() const =0
btDispatcherInfo::m_debugDraw
class btIDebugDraw * m_debugDraw
Definition: btDispatcher.h:58
TestTriangleAgainstAabb2
bool TestTriangleAgainstAabb2(const btVector3 *vertices, const btVector3 &aabbMin, const btVector3 &aabbMax)
conservative test for overlap between triangle and aabb
Definition: btAabbUtil2.h:59
BT_CONTACT_POINT_ALGORITHMS
@ BT_CONTACT_POINT_ALGORITHMS
Definition: btDispatcher.h:69
btConvexConcaveCollisionAlgorithm::getAllContactManifolds
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)
Definition: btConvexConcaveCollisionAlgorithm.cpp:42
btCollisionObjectWrapper::getWorldTransform
const btTransform & getWorldTransform() const
Definition: btCollisionObjectWrapper.h:38
btCollisionObject::setHitFraction
void setHitFraction(btScalar hitFraction)
Definition: btCollisionObject.h:479
btCollisionAlgorithm::processCollision
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)=0
btSubsimplexConvexCast
btSubsimplexConvexCast implements Gino van den Bergens' paper "Ray Casting against bteral Convex Obje...
Definition: btSubSimplexConvexCast.h:28
btTriangleShape
Definition: btTriangleShape.h:22
btTriangleShape.h
btTransform::setIdentity
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:172
btDispatcher::freeCollisionAlgorithm
virtual void freeCollisionAlgorithm(void *ptr)=0
btCollisionAlgorithm
btCollisionAlgorithm is an collision interface that is compatible with the Broadphase and btDispatche...
Definition: btCollisionAlgorithm.h:55
btDispatcher::getNewManifold
virtual btPersistentManifold * getNewManifold(const btCollisionObject *b0, const btCollisionObject *b1)=0
btIDebugDraw::DBG_DrawWireframe
@ DBG_DrawWireframe
Definition: btIDebugDraw.h:59
btManifoldResult::getBody1Wrap
const btCollisionObjectWrapper * getBody1Wrap() const
Definition: btManifoldResult.h:122
btCollisionObject::getWorldTransform
btTransform & getWorldTransform()
Definition: btCollisionObject.h:372
btConvexCast::CastResult
RayResult stores the closest result alternatively, add a callback method to decide about closest/all ...
Definition: btConvexCast.h:36
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
Definition: btCollisionShape.h:27
btConvexTriangleCallback::~btConvexTriangleCallback
virtual ~btConvexTriangleCallback()
Definition: btConvexConcaveCollisionAlgorithm.cpp:66
btConvexTriangleCallback::clearCache
void clearCache()
Definition: btConvexConcaveCollisionAlgorithm.cpp:74
btVoronoiSimplexSolver
btVoronoiSimplexSolver is an implementation of the closest point distance algorithm from a 1-4 points...
Definition: btVoronoiSimplexSolver.h:99
btManifoldResult::setBody0Wrap
void setBody0Wrap(const btCollisionObjectWrapper *obj0Wrap)
Definition: btManifoldResult.h:127
btConvexTriangleCallback::m_aabbMax
btVector3 m_aabbMax
Definition: btConvexConcaveCollisionAlgorithm.h:33
btManifoldResult
btManifoldResult is a helper class to manage contact results.
Definition: btManifoldResult.h:39
btConvexTriangleCallback::clearWrapperData
void clearWrapperData()
Definition: btConvexConcaveCollisionAlgorithm.h:56
btDispatcher::releaseManifold
virtual void releaseManifold(btPersistentManifold *manifold)=0
btCollisionAlgorithmConstructionInfo
Definition: btCollisionAlgorithm.h:32
btCollisionObjectWrapper::getCollisionShape
const btCollisionShape * getCollisionShape() const
Definition: btCollisionObjectWrapper.h:40
btVector3::setMax
void setMax(const btVector3 &other)
Set each element to the max of the current values and the values of another btVector3.
Definition: btVector3.h:621
btConvexConcaveCollisionAlgorithm::clearCache
void clearCache()
Definition: btConvexConcaveCollisionAlgorithm.cpp:190
btCollisionShape::getAabb
virtual void getAabb(const btTransform &t, btVector3 &aabbMin, btVector3 &aabbMax) const =0
getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
btConvexTriangleCallback::m_triBodyWrap
const btCollisionObjectWrapper * m_triBodyWrap
Definition: btConvexConcaveCollisionAlgorithm.h:36
btCollisionObject::getInterpolationWorldTransform
const btTransform & getInterpolationWorldTransform() const
Definition: btCollisionObject.h:405
btTriangleCallback
The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTrian...
Definition: btTriangleCallback.h:24
btConvexConcaveCollisionAlgorithm::calculateTimeOfImpact
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
Definition: btConvexConcaveCollisionAlgorithm.cpp:232
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
btConcaveShape::processAllTriangles
virtual void processAllTriangles(btTriangleCallback *callback, const btVector3 &aabbMin, const btVector3 &aabbMax) const =0
btConvexTriangleCallback::processTriangle
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
Definition: btConvexConcaveCollisionAlgorithm.cpp:80
btCollisionObjectWrapper::getCollisionObject
const btCollisionObject * getCollisionObject() const
Definition: btCollisionObjectWrapper.h:39
btManifoldResult::getBody0Wrap
const btCollisionObjectWrapper * getBody0Wrap() const
Definition: btManifoldResult.h:118
btSphereShape
The btSphereShape implements an implicit sphere, centered around a local origin with radius.
Definition: btSphereShape.h:22
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
btSphereShape.h
btTransform::getOrigin
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:117
btConvexTriangleCallback::btConvexTriangleCallback
btConvexTriangleCallback(btDispatcher *dispatcher, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
Definition: btConvexConcaveCollisionAlgorithm.cpp:51
btManifoldResult.h
btDispatcher::findAlgorithm
virtual btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)=0
btManifoldResult::setPersistentManifold
void setPersistentManifold(btPersistentManifold *manifoldPtr)
Definition: btManifoldResult.h:72
btCollisionAlgorithmConstructionInfo::m_dispatcher1
btDispatcher * m_dispatcher1
Definition: btCollisionAlgorithm.h:45
btPersistentManifold::setBodies
void setBodies(const btCollisionObject *body0, const btCollisionObject *body1)
Definition: btPersistentManifold.h:105
btIDebugDraw::drawLine
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
btDispatcherInfo
Definition: btDispatcher.h:30
btAlignedObjectArray< btPersistentManifold * >
btConvexConcaveCollisionAlgorithm::processCollision
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
Definition: btConvexConcaveCollisionAlgorithm.cpp:196
btCollisionShape::isConvex
bool isConvex() const
Definition: btCollisionShape.h:73
btConvexCast::CastResult::m_fraction
btScalar m_fraction
Definition: btConvexCast.h:57
btBroadphaseProxy.h
btVector3::setMin
void setMin(const btVector3 &other)
Set each element to the min of the current values and the values of another btVector3.
Definition: btVector3.h:638
btConvexConcaveCollisionAlgorithm.h
btIDebugDraw.h
btCollisionObject::getHitFraction
btScalar getHitFraction() const
Definition: btCollisionObject.h:474
btConvexTriangleCallback::getAabbMax
const btVector3 & getAabbMax() const
Definition: btConvexConcaveCollisionAlgorithm.h:71
btQuickprof.h
btConvexConcaveCollisionAlgorithm::m_btConvexTriangleCallback
btConvexTriangleCallback m_btConvexTriangleCallback
Definition: btConvexConcaveCollisionAlgorithm.h:85
btSubsimplexConvexCast::calcTimeOfImpact
virtual bool calcTimeOfImpact(const btTransform &fromA, const btTransform &toA, const btTransform &fromB, const btTransform &toB, CastResult &result)
SimsimplexConvexCast calculateTimeOfImpact calculates the time of impact+normal for the linear cast (...
Definition: btSubSimplexConvexCast.cpp:38
btManifoldResult::refreshContactPoints
void refreshContactPoints()
Definition: btManifoldResult.h:101
btDispatcher::clearManifold
virtual void clearManifold(btPersistentManifold *manifold)=0
btConvexTriangleCallback::setTimeStepAndCounters
void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo &dispatchInfo, const btCollisionObjectWrapper *convexBodyWrap, const btCollisionObjectWrapper *triBodyWrap, btManifoldResult *resultOut)
Definition: btConvexConcaveCollisionAlgorithm.cpp:166
btActivatingCollisionAlgorithm
This class is not enabled yet (work-in-progress) to more aggressively activate objects.
Definition: btActivatingCollisionAlgorithm.h:22
btCollisionShape::isConcave
bool isConcave() const
Definition: btCollisionShape.h:81
btConvexInternalShape::setMargin
virtual void setMargin(btScalar margin)
Definition: btConvexInternalShape.h:109
btCollisionObject.h
btConcaveShape::getMargin
virtual btScalar getMargin() const
Definition: btConcaveShape.h:50
btCollisionObject::getCcdSweptSphereRadius
btScalar getCcdSweptSphereRadius() const
Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
Definition: btCollisionObject.h:496
btAlignedObjectArray::push_back
void push_back(const T &_Val)
Definition: btAlignedObjectArray.h:274
btMultiSphereShape.h
btManifoldResult::setShapeIdentifiersA
virtual void setShapeIdentifiersA(int partId0, int index0)
setShapeIdentifiersA/B provides experimental support for per-triangle material / custom material comb...
Definition: btManifoldResult.h:86
btConvexTriangleCallback::getAabbMin
const btVector3 & getAabbMin() const
Definition: btConvexConcaveCollisionAlgorithm.h:67
btConvexTriangleCallback::m_dispatcher
btDispatcher * m_dispatcher
Definition: btConvexConcaveCollisionAlgorithm.h:41
BT_PROFILE
#define BT_PROFILE(name)
Definition: btQuickprof.h:215
btConvexTriangleCallback::m_aabbMin
btVector3 m_aabbMin
Definition: btConvexConcaveCollisionAlgorithm.h:32
btManifoldResult::m_closestPointDistanceThreshold
btScalar m_closestPointDistanceThreshold
Definition: btManifoldResult.h:147
btCollisionObject::getCollisionShape
const btCollisionShape * getCollisionShape() const
Definition: btCollisionObject.h:228
btConvexTriangleCallback::m_collisionMarginTriangle
btScalar m_collisionMarginTriangle
Definition: btConvexConcaveCollisionAlgorithm.h:43