Bullet Collision Detection & Physics Library: btPersistentManifold.h Source File

Bullet Collision Detection & Physics Library

btPersistentManifold.h
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 #ifndef BT_PERSISTENT_MANIFOLD_H
17 #define BT_PERSISTENT_MANIFOLD_H
18
19 #include "LinearMath/btVector3.h"
20 #include "LinearMath/btTransform.h"
21 #include "btManifoldPoint.h"
22 class btCollisionObject;
23 #include "LinearMath/btAlignedAllocator.h"
24
25 struct btCollisionResult;
26 struct btCollisionObjectDoubleData;
27 struct btCollisionObjectFloatData;
28
30 extern btScalar gContactBreakingThreshold;
31
32 #ifndef SWIG
33 class btPersistentManifold;
34
35 typedef bool (*ContactDestroyedCallback)(void* userPersistentData);
36 typedef bool (*ContactProcessedCallback)(btManifoldPoint& cp, void* body0, void* body1);
37 typedef void (*ContactStartedCallback)(btPersistentManifold* const& manifold);
38 typedef void (*ContactEndedCallback)(btPersistentManifold* const& manifold);
39 extern ContactDestroyedCallback gContactDestroyedCallback;
40 extern ContactProcessedCallback gContactProcessedCallback;
41 extern ContactStartedCallback gContactStartedCallback;
42 extern ContactEndedCallback gContactEndedCallback;
43 #endif //SWIG
44
45 //the enum starts at 1024 to avoid type conflicts with btTypedConstraint
46 enum btContactManifoldTypes
47 {
48 MIN_CONTACT_MANIFOLD_TYPE = 1024,
49 BT_PERSISTENT_MANIFOLD_TYPE
50 };
51
52 #define MANIFOLD_CACHE_SIZE 4
53
61
62 //ATTRIBUTE_ALIGNED128( class) btPersistentManifold : public btTypedObject
63 ATTRIBUTE_ALIGNED16(class)
64 btPersistentManifold : public btTypedObject
65 {
66 btManifoldPoint m_pointCache[MANIFOLD_CACHE_SIZE];
67
69 const btCollisionObject* m_body0;
70 const btCollisionObject* m_body1;
71
72 int m_cachedPoints;
73
74 btScalar m_contactBreakingThreshold;
75 btScalar m_contactProcessingThreshold;
76
78 int sortCachedPoints(const btManifoldPoint& pt);
79
80 int findContactPoint(const btManifoldPoint* unUsed, int numUnused, const btManifoldPoint& pt);
81
82 public:
83 BT_DECLARE_ALIGNED_ALLOCATOR();
84
85 int m_companionIdA;
86 int m_companionIdB;
87
88 int m_index1a;
89
90 btPersistentManifold();
91
92 btPersistentManifold(const btCollisionObject* body0, const btCollisionObject* body1, int, btScalar contactBreakingThreshold, btScalar contactProcessingThreshold)
93 : btTypedObject(BT_PERSISTENT_MANIFOLD_TYPE),
94 m_body0(body0),
95 m_body1(body1),
96 m_cachedPoints(0),
97 m_contactBreakingThreshold(contactBreakingThreshold),
98 m_contactProcessingThreshold(contactProcessingThreshold),
99 m_companionIdA(0),
100 m_companionIdB(0),
101 m_index1a(0)
102 {
103 }
104
105 SIMD_FORCE_INLINE const btCollisionObject* getBody0() const { return m_body0; }
106 SIMD_FORCE_INLINE const btCollisionObject* getBody1() const { return m_body1; }
107
108 void setBodies(const btCollisionObject* body0, const btCollisionObject* body1)
109 {
110 m_body0 = body0;
111 m_body1 = body1;
112 }
113
114 void clearUserCache(btManifoldPoint & pt);
115
116 #ifdef DEBUG_PERSISTENCY
117 void DebugPersistency();
118 #endif //
119
120 SIMD_FORCE_INLINE int getNumContacts() const
121 {
122 return m_cachedPoints;
123 }
125 void setNumContacts(int cachedPoints)
126 {
127 m_cachedPoints = cachedPoints;
128 }
129
130 SIMD_FORCE_INLINE const btManifoldPoint& getContactPoint(int index) const
131 {
132 btAssert(index < m_cachedPoints);
133 return m_pointCache[index];
134 }
135
136 SIMD_FORCE_INLINE btManifoldPoint& getContactPoint(int index)
137 {
138 btAssert(index < m_cachedPoints);
139 return m_pointCache[index];
140 }
141
143 btScalar getContactBreakingThreshold() const;
144
145 btScalar getContactProcessingThreshold() const
146 {
147 return m_contactProcessingThreshold;
148 }
149
150 void setContactBreakingThreshold(btScalar contactBreakingThreshold)
151 {
152 m_contactBreakingThreshold = contactBreakingThreshold;
153 }
154
155 void setContactProcessingThreshold(btScalar contactProcessingThreshold)
156 {
157 m_contactProcessingThreshold = contactProcessingThreshold;
158 }
159
160 int getCacheEntry(const btManifoldPoint& newPoint) const;
161
162 int addManifoldPoint(const btManifoldPoint& newPoint, bool isPredictive = false);
163
164 void removeContactPoint(int index)
165 {
166 clearUserCache(m_pointCache[index]);
167
168 int lastUsedIndex = getNumContacts() - 1;
169 // m_pointCache[index] = m_pointCache[lastUsedIndex];
170 if (index != lastUsedIndex)
171 {
172 m_pointCache[index] = m_pointCache[lastUsedIndex];
173 //get rid of duplicated userPersistentData pointer
174 m_pointCache[lastUsedIndex].m_userPersistentData = 0;
175 m_pointCache[lastUsedIndex].m_appliedImpulse = 0.f;
176 m_pointCache[lastUsedIndex].m_prevRHS = 0.f;
177 m_pointCache[lastUsedIndex].m_contactPointFlags = 0;
178 m_pointCache[lastUsedIndex].m_appliedImpulseLateral1 = 0.f;
179 m_pointCache[lastUsedIndex].m_appliedImpulseLateral2 = 0.f;
180 m_pointCache[lastUsedIndex].m_lifeTime = 0;
181 }
182
183 btAssert(m_pointCache[lastUsedIndex].m_userPersistentData == 0);
184 m_cachedPoints--;
185
186 if (gContactEndedCallback && m_cachedPoints == 0)
187 {
188 gContactEndedCallback(this);
189 }
190 }
191 void replaceContactPoint(const btManifoldPoint& newPoint, int insertIndex)
192 {
193 btAssert(validContactDistance(newPoint));
194
195 #define MAINTAIN_PERSISTENCY 1
196 #ifdef MAINTAIN_PERSISTENCY
197 int lifeTime = m_pointCache[insertIndex].getLifeTime();
198 btScalar appliedImpulse = m_pointCache[insertIndex].m_appliedImpulse;
199 btScalar prevRHS = m_pointCache[insertIndex].m_prevRHS;
200 btScalar appliedLateralImpulse1 = m_pointCache[insertIndex].m_appliedImpulseLateral1;
201 btScalar appliedLateralImpulse2 = m_pointCache[insertIndex].m_appliedImpulseLateral2;
202
203 bool replacePoint = true;
206 if (newPoint.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR)
207 {
208 // printf("appliedImpulse=%f\n", appliedImpulse);
209 // printf("appliedLateralImpulse1=%f\n", appliedLateralImpulse1);
210 // printf("appliedLateralImpulse2=%f\n", appliedLateralImpulse2);
211 // printf("mu = %f\n", m_pointCache[insertIndex].m_combinedFriction);
212 btScalar mu = m_pointCache[insertIndex].m_combinedFriction;
213 btScalar eps = 0; //we could allow to enlarge or shrink the tolerance to check against the friction cone a bit, say 1e-7
214 btScalar a = appliedLateralImpulse1 * appliedLateralImpulse1 + appliedLateralImpulse2 * appliedLateralImpulse2;
215 btScalar b = eps + mu * appliedImpulse;
216 b = b * b;
217 replacePoint = (a) > (b);
218 }
219
220 if (replacePoint)
221 {
222 btAssert(lifeTime >= 0);
223 void* cache = m_pointCache[insertIndex].m_userPersistentData;
224
225 m_pointCache[insertIndex] = newPoint;
226 m_pointCache[insertIndex].m_userPersistentData = cache;
227 m_pointCache[insertIndex].m_appliedImpulse = appliedImpulse;
228 m_pointCache[insertIndex].m_prevRHS = prevRHS;
229 m_pointCache[insertIndex].m_appliedImpulseLateral1 = appliedLateralImpulse1;
230 m_pointCache[insertIndex].m_appliedImpulseLateral2 = appliedLateralImpulse2;
231 }
232
233 m_pointCache[insertIndex].m_lifeTime = lifeTime;
234 #else
235 clearUserCache(m_pointCache[insertIndex]);
236 m_pointCache[insertIndex] = newPoint;
237
238 #endif
239 }
240
241 bool validContactDistance(const btManifoldPoint& pt) const
242 {
243 return pt.m_distance1 <= getContactBreakingThreshold();
244 }
246 void refreshContactPoints(const btTransform& trA, const btTransform& trB);
247
248 SIMD_FORCE_INLINE void clearManifold()
249 {
250 int i;
251 for (i = 0; i < m_cachedPoints; i++)
252 {
253 clearUserCache(m_pointCache[i]);
254 }
255
256 if (gContactEndedCallback && m_cachedPoints)
257 {
258 gContactEndedCallback(this);
259 }
260 m_cachedPoints = 0;
261 }
262
263 int calculateSerializeBufferSize() const;
264 const char* serialize(const class btPersistentManifold* manifold, void* dataBuffer, class btSerializer* serializer) const;
265 void deSerialize(const struct btPersistentManifoldDoubleData* manifoldDataPtr);
266 void deSerialize(const struct btPersistentManifoldFloatData* manifoldDataPtr);
267 };
268
269 // clang-format off
270
271 struct btPersistentManifoldDoubleData
272 {
273 btVector3DoubleData m_pointCacheLocalPointA[4];
274 btVector3DoubleData m_pointCacheLocalPointB[4];
275 btVector3DoubleData m_pointCachePositionWorldOnA[4];
276 btVector3DoubleData m_pointCachePositionWorldOnB[4];
277 btVector3DoubleData m_pointCacheNormalWorldOnB[4];
278 btVector3DoubleData m_pointCacheLateralFrictionDir1[4];
279 btVector3DoubleData m_pointCacheLateralFrictionDir2[4];
280 double m_pointCacheDistance[4];
281 double m_pointCacheAppliedImpulse[4];
282 double m_pointCachePrevRHS[4];
283 double m_pointCacheCombinedFriction[4];
284 double m_pointCacheCombinedRollingFriction[4];
285 double m_pointCacheCombinedSpinningFriction[4];
286 double m_pointCacheCombinedRestitution[4];
287 int m_pointCachePartId0[4];
288 int m_pointCachePartId1[4];
289 int m_pointCacheIndex0[4];
290 int m_pointCacheIndex1[4];
291 int m_pointCacheContactPointFlags[4];
292 double m_pointCacheAppliedImpulseLateral1[4];
293 double m_pointCacheAppliedImpulseLateral2[4];
294 double m_pointCacheContactMotion1[4];
295 double m_pointCacheContactMotion2[4];
296 double m_pointCacheContactCFM[4];
297 double m_pointCacheCombinedContactStiffness1[4];
298 double m_pointCacheContactERP[4];
299 double m_pointCacheCombinedContactDamping1[4];
300 double m_pointCacheFrictionCFM[4];
301 int m_pointCacheLifeTime[4];
302
303 int m_numCachedPoints;
304 int m_companionIdA;
305 int m_companionIdB;
306 int m_index1a;
307
308 int m_objectType;
309 double m_contactBreakingThreshold;
310 double m_contactProcessingThreshold;
311 int m_padding;
312
313 btCollisionObjectDoubleData *m_body0;
314 btCollisionObjectDoubleData *m_body1;
315 };
316
317
318 struct btPersistentManifoldFloatData
319 {
320 btVector3FloatData m_pointCacheLocalPointA[4];
321 btVector3FloatData m_pointCacheLocalPointB[4];
322 btVector3FloatData m_pointCachePositionWorldOnA[4];
323 btVector3FloatData m_pointCachePositionWorldOnB[4];
324 btVector3FloatData m_pointCacheNormalWorldOnB[4];
325 btVector3FloatData m_pointCacheLateralFrictionDir1[4];
326 btVector3FloatData m_pointCacheLateralFrictionDir2[4];
327 float m_pointCacheDistance[4];
328 float m_pointCacheAppliedImpulse[4];
329 float m_pointCachePrevRHS[4];
330 float m_pointCacheCombinedFriction[4];
331 float m_pointCacheCombinedRollingFriction[4];
332 float m_pointCacheCombinedSpinningFriction[4];
333 float m_pointCacheCombinedRestitution[4];
334 int m_pointCachePartId0[4];
335 int m_pointCachePartId1[4];
336 int m_pointCacheIndex0[4];
337 int m_pointCacheIndex1[4];
338 int m_pointCacheContactPointFlags[4];
339 float m_pointCacheAppliedImpulseLateral1[4];
340 float m_pointCacheAppliedImpulseLateral2[4];
341 float m_pointCacheContactMotion1[4];
342 float m_pointCacheContactMotion2[4];
343 float m_pointCacheContactCFM[4];
344 float m_pointCacheCombinedContactStiffness1[4];
345 float m_pointCacheContactERP[4];
346 float m_pointCacheCombinedContactDamping1[4];
347 float m_pointCacheFrictionCFM[4];
348 int m_pointCacheLifeTime[4];
349
350 int m_numCachedPoints;
351 int m_companionIdA;
352 int m_companionIdB;
353 int m_index1a;
354
355 int m_objectType;
356 float m_contactBreakingThreshold;
357 float m_contactProcessingThreshold;
358 int m_padding;
359
360 btCollisionObjectFloatData *m_body0;
361 btCollisionObjectFloatData *m_body1;
362 };
363
364 // clang-format on
365
366 #ifdef BT_USE_DOUBLE_PRECISION
367 #define btPersistentManifoldData btPersistentManifoldDoubleData
368 #define btPersistentManifoldDataName "btPersistentManifoldDoubleData"
369 #else
370 #define btPersistentManifoldData btPersistentManifoldFloatData
371 #define btPersistentManifoldDataName "btPersistentManifoldFloatData"
372 #endif //BT_USE_DOUBLE_PRECISION
373
374 #endif //BT_PERSISTENT_MANIFOLD_H
btPersistentManifoldDoubleData::m_pointCachePartId1
int m_pointCachePartId1[4]
Definition: btPersistentManifold.h:288
ContactDestroyedCallback
bool(* ContactDestroyedCallback)(void *userPersistentData)
Definition: btPersistentManifold.h:35
btPersistentManifold::setContactProcessingThreshold
void setContactProcessingThreshold(btScalar contactProcessingThreshold)
Definition: btPersistentManifold.h:155
btPersistentManifold::setContactBreakingThreshold
void setContactBreakingThreshold(btScalar contactBreakingThreshold)
Definition: btPersistentManifold.h:150
btManifoldPoint.h
btCollisionObject
btCollisionObject can be used to manage collision detection objects.
Definition: btCollisionObject.h:50
btPersistentManifold::m_pointCache
btManifoldPoint m_pointCache[MANIFOLD_CACHE_SIZE]
Definition: btPersistentManifold.h:66
btPersistentManifoldFloatData::m_pointCacheIndex0
int m_pointCacheIndex0[4]
Definition: btPersistentManifold.h:336
btPersistentManifoldDoubleData
Definition: btPersistentManifold.h:272
btPersistentManifold::refreshContactPoints
void refreshContactPoints(const btTransform &trA, const btTransform &trB)
calculated new worldspace coordinates and depth, and reject points that exceed the collision margin
Definition: btPersistentManifold.cpp:247
btPersistentManifoldDoubleData::m_body1
btCollisionObjectDoubleData * m_body1
Definition: btPersistentManifold.h:314
btContactManifoldTypes
btContactManifoldTypes
Definition: btPersistentManifold.h:47
gContactStartedCallback
ContactStartedCallback gContactStartedCallback
Definition: btPersistentManifold.cpp:29
btPersistentManifold::m_cachedPoints
int m_cachedPoints
Definition: btPersistentManifold.h:72
btPersistentManifoldFloatData::m_pointCacheCombinedRestitution
float m_pointCacheCombinedRestitution[4]
Definition: btPersistentManifold.h:333
btPersistentManifoldFloatData::m_pointCacheLateralFrictionDir1
btVector3FloatData m_pointCacheLateralFrictionDir1[4]
Definition: btPersistentManifold.h:325
btManifoldPoint::m_contactPointFlags
int m_contactPointFlags
Definition: btManifoldPoint.h:116
btPersistentManifold::setNumContacts
void setNumContacts(int cachedPoints)
the setNumContacts API is usually not used, except when you gather/fill all contacts manually
Definition: btPersistentManifold.h:125
btPersistentManifoldFloatData::m_pointCachePositionWorldOnB
btVector3FloatData m_pointCachePositionWorldOnB[4]
Definition: btPersistentManifold.h:323
btPersistentManifoldFloatData::m_contactProcessingThreshold
float m_contactProcessingThreshold
Definition: btPersistentManifold.h:357
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
btPersistentManifoldFloatData::m_objectType
int m_objectType
Definition: btPersistentManifold.h:355
btPersistentManifoldFloatData::m_pointCacheContactPointFlags
int m_pointCacheContactPointFlags[4]
Definition: btPersistentManifold.h:338
btCollisionObjectDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:604
ContactProcessedCallback
bool(* ContactProcessedCallback)(btManifoldPoint &cp, void *body0, void *body1)
Definition: btPersistentManifold.h:36
btPersistentManifoldDoubleData::m_index1a
int m_index1a
Definition: btPersistentManifold.h:306
btCollisionObjectFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:639
gContactProcessedCallback
ContactProcessedCallback gContactProcessedCallback
Definition: btPersistentManifold.cpp:28
btPersistentManifold::deSerialize
void deSerialize(const struct btPersistentManifoldDoubleData *manifoldDataPtr)
Definition: btPersistentManifold.cpp:360
btPersistentManifold::getBody0
const btCollisionObject * getBody0() const
Definition: btPersistentManifold.h:105
btPersistentManifold::clearUserCache
void clearUserCache(btManifoldPoint &pt)
Definition: btPersistentManifold.cpp:59
btPersistentManifoldFloatData::m_numCachedPoints
int m_numCachedPoints
Definition: btPersistentManifold.h:350
btPersistentManifoldDoubleData::m_pointCacheLateralFrictionDir2
btVector3DoubleData m_pointCacheLateralFrictionDir2[4]
Definition: btPersistentManifold.h:279
btPersistentManifoldDoubleData::m_pointCacheIndex1
int m_pointCacheIndex1[4]
Definition: btPersistentManifold.h:290
btPersistentManifoldFloatData::m_pointCacheAppliedImpulseLateral1
float m_pointCacheAppliedImpulseLateral1[4]
Definition: btPersistentManifold.h:339
btPersistentManifold::getNumContacts
int getNumContacts() const
Definition: btPersistentManifold.h:120
btPersistentManifold::clearManifold
void clearManifold()
Definition: btPersistentManifold.h:248
btPersistentManifoldFloatData::m_body0
btCollisionObjectFloatData * m_body0
Definition: btPersistentManifold.h:360
btPersistentManifoldFloatData::m_pointCacheDistance
float m_pointCacheDistance[4]
Definition: btPersistentManifold.h:327
btPersistentManifoldFloatData::m_pointCacheCombinedRollingFriction
float m_pointCacheCombinedRollingFriction[4]
Definition: btPersistentManifold.h:331
btPersistentManifoldFloatData
Definition: btPersistentManifold.h:319
btPersistentManifoldFloatData::m_companionIdA
int m_companionIdA
Definition: btPersistentManifold.h:351
btPersistentManifoldFloatData::m_pointCachePartId0
int m_pointCachePartId0[4]
Definition: btPersistentManifold.h:334
btPersistentManifold::BT_DECLARE_ALIGNED_ALLOCATOR
BT_DECLARE_ALIGNED_ALLOCATOR()
btPersistentManifoldFloatData::m_pointCacheAppliedImpulseLateral2
float m_pointCacheAppliedImpulseLateral2[4]
Definition: btPersistentManifold.h:340
btPersistentManifold::sortCachedPoints
int sortCachedPoints(const btManifoldPoint &pt)
sort cached points so most isolated points come first
Definition: btPersistentManifold.cpp:111
btPersistentManifold::m_contactProcessingThreshold
btScalar m_contactProcessingThreshold
Definition: btPersistentManifold.h:75
btPersistentManifoldFloatData::m_pointCacheCombinedSpinningFriction
float m_pointCacheCombinedSpinningFriction[4]
Definition: btPersistentManifold.h:332
btPersistentManifoldFloatData::m_pointCacheLocalPointB
btVector3FloatData m_pointCacheLocalPointB[4]
Definition: btPersistentManifold.h:321
btPersistentManifold::validContactDistance
bool validContactDistance(const btManifoldPoint &pt) const
Definition: btPersistentManifold.h:241
btVector3FloatData
Definition: btVector3.h:1282
BT_CONTACT_FLAG_FRICTION_ANCHOR
@ BT_CONTACT_FLAG_FRICTION_ANCHOR
Definition: btManifoldPoint.h:46
btPersistentManifoldDoubleData::m_pointCacheIndex0
int m_pointCacheIndex0[4]
Definition: btPersistentManifold.h:289
btPersistentManifoldDoubleData::m_pointCacheCombinedSpinningFriction
double m_pointCacheCombinedSpinningFriction[4]
Definition: btPersistentManifold.h:285
btPersistentManifoldDoubleData::m_pointCacheAppliedImpulseLateral1
double m_pointCacheAppliedImpulseLateral1[4]
Definition: btPersistentManifold.h:292
btPersistentManifoldDoubleData::m_pointCacheAppliedImpulse
double m_pointCacheAppliedImpulse[4]
Definition: btPersistentManifold.h:281
btVector3.h
btAssert
#define btAssert(x)
Definition: btScalar.h:153
btPersistentManifoldFloatData::m_pointCacheNormalWorldOnB
btVector3FloatData m_pointCacheNormalWorldOnB[4]
Definition: btPersistentManifold.h:324
btVector3DoubleData
Definition: btVector3.h:1287
gContactEndedCallback
ContactEndedCallback gContactEndedCallback
Definition: btPersistentManifold.cpp:30
btPersistentManifoldDoubleData::m_pointCacheLifeTime
int m_pointCacheLifeTime[4]
Definition: btPersistentManifold.h:301
btPersistentManifoldDoubleData::m_pointCacheCombinedContactStiffness1
double m_pointCacheCombinedContactStiffness1[4]
Definition: btPersistentManifold.h:297
btManifoldPoint
ManifoldContactPoint collects and maintains persistent contactpoints.
Definition: btManifoldPoint.h:52
btPersistentManifoldDoubleData::m_pointCacheNormalWorldOnB
btVector3DoubleData m_pointCacheNormalWorldOnB[4]
Definition: btPersistentManifold.h:277
btPersistentManifoldDoubleData::m_pointCacheCombinedContactDamping1
double m_pointCacheCombinedContactDamping1[4]
Definition: btPersistentManifold.h:299
btManifoldPoint::m_userPersistentData
void * m_userPersistentData
Definition: btManifoldPoint.h:114
btPersistentManifoldDoubleData::m_pointCacheCombinedRestitution
double m_pointCacheCombinedRestitution[4]
Definition: btPersistentManifold.h:286
btPersistentManifoldFloatData::m_padding
int m_padding
Definition: btPersistentManifold.h:358
btManifoldPoint::m_distance1
btScalar m_distance1
Definition: btManifoldPoint.h:102
btPersistentManifoldDoubleData::m_pointCachePartId0
int m_pointCachePartId0[4]
Definition: btPersistentManifold.h:287
btPersistentManifoldDoubleData::m_pointCacheCombinedFriction
double m_pointCacheCombinedFriction[4]
Definition: btPersistentManifold.h:283
btPersistentManifoldDoubleData::m_pointCacheCombinedRollingFriction
double m_pointCacheCombinedRollingFriction[4]
Definition: btPersistentManifold.h:284
btPersistentManifold::getContactProcessingThreshold
btScalar getContactProcessingThreshold() const
Definition: btPersistentManifold.h:145
btPersistentManifoldDoubleData::m_pointCacheDistance
double m_pointCacheDistance[4]
Definition: btPersistentManifold.h:280
btPersistentManifold::calculateSerializeBufferSize
int calculateSerializeBufferSize() const
Definition: btPersistentManifold.cpp:304
btAlignedAllocator.h
btPersistentManifoldFloatData::m_body1
btCollisionObjectFloatData * m_body1
Definition: btPersistentManifold.h:361
btPersistentManifoldFloatData::m_pointCacheCombinedContactStiffness1
float m_pointCacheCombinedContactStiffness1[4]
Definition: btPersistentManifold.h:344
btPersistentManifold::removeContactPoint
void removeContactPoint(int index)
Definition: btPersistentManifold.h:164
btTransform.h
btPersistentManifoldDoubleData::m_pointCacheContactERP
double m_pointCacheContactERP[4]
Definition: btPersistentManifold.h:298
btPersistentManifoldDoubleData::m_pointCacheFrictionCFM
double m_pointCacheFrictionCFM[4]
Definition: btPersistentManifold.h:300
btPersistentManifold::btPersistentManifold
btPersistentManifold()
Definition: btPersistentManifold.cpp:35
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:30
btManifoldPoint::m_prevRHS
btScalar m_prevRHS
Definition: btManifoldPoint.h:119
btPersistentManifoldDoubleData::m_companionIdB
int m_companionIdB
Definition: btPersistentManifold.h:305
btPersistentManifoldDoubleData::m_pointCacheLateralFrictionDir1
btVector3DoubleData m_pointCacheLateralFrictionDir1[4]
Definition: btPersistentManifold.h:278
btPersistentManifoldFloatData::m_pointCacheLateralFrictionDir2
btVector3FloatData m_pointCacheLateralFrictionDir2[4]
Definition: btPersistentManifold.h:326
btPersistentManifold
btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping...
Definition: btPersistentManifold.h:65
btPersistentManifoldDoubleData::m_pointCachePrevRHS
double m_pointCachePrevRHS[4]
Definition: btPersistentManifold.h:282
btPersistentManifoldDoubleData::m_body0
btCollisionObjectDoubleData * m_body0
Definition: btPersistentManifold.h:313
btPersistentManifold::addManifoldPoint
int addManifoldPoint(const btManifoldPoint &newPoint, bool isPredictive=false)
Definition: btPersistentManifold.cpp:212
btPersistentManifoldFloatData::m_pointCacheContactCFM
float m_pointCacheContactCFM[4]
Definition: btPersistentManifold.h:343
btPersistentManifold::setBodies
void setBodies(const btCollisionObject *body0, const btCollisionObject *body1)
Definition: btPersistentManifold.h:108
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:99
btPersistentManifold::replaceContactPoint
void replaceContactPoint(const btManifoldPoint &newPoint, int insertIndex)
Definition: btPersistentManifold.h:191
btPersistentManifold::getContactPoint
btManifoldPoint & getContactPoint(int index)
Definition: btPersistentManifold.h:136
btPersistentManifoldDoubleData::m_pointCacheLocalPointA
btVector3DoubleData m_pointCacheLocalPointA[4]
Definition: btPersistentManifold.h:273
btPersistentManifoldDoubleData::m_pointCacheAppliedImpulseLateral2
double m_pointCacheAppliedImpulseLateral2[4]
Definition: btPersistentManifold.h:293
btManifoldPoint::m_appliedImpulseLateral1
btScalar m_appliedImpulseLateral1
Definition: btManifoldPoint.h:120
btPersistentManifold::m_companionIdA
int m_companionIdA
Definition: btPersistentManifold.h:85
ContactEndedCallback
void(* ContactEndedCallback)(btPersistentManifold *const &manifold)
Definition: btPersistentManifold.h:38
btPersistentManifoldFloatData::m_pointCacheAppliedImpulse
float m_pointCacheAppliedImpulse[4]
Definition: btPersistentManifold.h:328
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:98
btPersistentManifoldFloatData::m_pointCacheLifeTime
int m_pointCacheLifeTime[4]
Definition: btPersistentManifold.h:348
btSerializer
Definition: btSerializer.h:66
btManifoldPoint::getLifeTime
int getLifeTime() const
Definition: btManifoldPoint.h:146
btPersistentManifoldFloatData::m_pointCachePrevRHS
float m_pointCachePrevRHS[4]
Definition: btPersistentManifold.h:329
btPersistentManifoldFloatData::m_pointCachePositionWorldOnA
btVector3FloatData m_pointCachePositionWorldOnA[4]
Definition: btPersistentManifold.h:322
MANIFOLD_CACHE_SIZE
#define MANIFOLD_CACHE_SIZE
Definition: btPersistentManifold.h:52
btPersistentManifoldFloatData::m_pointCacheContactERP
float m_pointCacheContactERP[4]
Definition: btPersistentManifold.h:345
btPersistentManifoldDoubleData::m_contactBreakingThreshold
double m_contactBreakingThreshold
Definition: btPersistentManifold.h:309
btPersistentManifoldDoubleData::m_pointCacheContactMotion2
double m_pointCacheContactMotion2[4]
Definition: btPersistentManifold.h:295
btPersistentManifold::m_index1a
int m_index1a
Definition: btPersistentManifold.h:88
btTypedObject
rudimentary class to provide type info
Definition: btScalar.h:800
btPersistentManifoldFloatData::m_contactBreakingThreshold
float m_contactBreakingThreshold
Definition: btPersistentManifold.h:356
btPersistentManifold::m_companionIdB
int m_companionIdB
Definition: btPersistentManifold.h:86
btPersistentManifoldDoubleData::m_companionIdA
int m_companionIdA
Definition: btPersistentManifold.h:304
btPersistentManifoldDoubleData::m_numCachedPoints
int m_numCachedPoints
Definition: btPersistentManifold.h:303
btPersistentManifoldFloatData::m_pointCacheCombinedContactDamping1
float m_pointCacheCombinedContactDamping1[4]
Definition: btPersistentManifold.h:346
BT_PERSISTENT_MANIFOLD_TYPE
@ BT_PERSISTENT_MANIFOLD_TYPE
Definition: btPersistentManifold.h:49
btPersistentManifoldDoubleData::m_objectType
int m_objectType
Definition: btPersistentManifold.h:308
btPersistentManifoldFloatData::m_pointCacheIndex1
int m_pointCacheIndex1[4]
Definition: btPersistentManifold.h:337
btPersistentManifold::serialize
const char * serialize(const class btPersistentManifold *manifold, void *dataBuffer, class btSerializer *serializer) const
Definition: btPersistentManifold.cpp:309
MIN_CONTACT_MANIFOLD_TYPE
@ MIN_CONTACT_MANIFOLD_TYPE
Definition: btPersistentManifold.h:48
btPersistentManifoldDoubleData::m_pointCachePositionWorldOnA
btVector3DoubleData m_pointCachePositionWorldOnA[4]
Definition: btPersistentManifold.h:275
btPersistentManifold::getContactPoint
const btManifoldPoint & getContactPoint(int index) const
Definition: btPersistentManifold.h:130
btPersistentManifoldFloatData::m_companionIdB
int m_companionIdB
Definition: btPersistentManifold.h:352
btPersistentManifold::m_contactBreakingThreshold
btScalar m_contactBreakingThreshold
Definition: btPersistentManifold.h:74
btPersistentManifoldFloatData::m_pointCacheLocalPointA
btVector3FloatData m_pointCacheLocalPointA[4]
Definition: btPersistentManifold.h:320
btPersistentManifoldFloatData::m_pointCacheFrictionCFM
float m_pointCacheFrictionCFM[4]
Definition: btPersistentManifold.h:347
btManifoldPoint::m_lifeTime
int m_lifeTime
Definition: btManifoldPoint.h:137
btPersistentManifoldDoubleData::m_pointCacheContactPointFlags
int m_pointCacheContactPointFlags[4]
Definition: btPersistentManifold.h:291
btPersistentManifoldDoubleData::m_pointCachePositionWorldOnB
btVector3DoubleData m_pointCachePositionWorldOnB[4]
Definition: btPersistentManifold.h:276
btPersistentManifold::m_body1
const btCollisionObject * m_body1
Definition: btPersistentManifold.h:70
btPersistentManifold::findContactPoint
int findContactPoint(const btManifoldPoint *unUsed, int numUnused, const btManifoldPoint &pt)
btPersistentManifold::btPersistentManifold
btPersistentManifold(const btCollisionObject *body0, const btCollisionObject *body1, int, btScalar contactBreakingThreshold, btScalar contactProcessingThreshold)
Definition: btPersistentManifold.h:92
btPersistentManifoldDoubleData::m_pointCacheContactMotion1
double m_pointCacheContactMotion1[4]
Definition: btPersistentManifold.h:294
btPersistentManifold::getBody1
const btCollisionObject * getBody1() const
Definition: btPersistentManifold.h:106
btPersistentManifoldFloatData::m_pointCacheContactMotion1
float m_pointCacheContactMotion1[4]
Definition: btPersistentManifold.h:341
btManifoldPoint::m_appliedImpulse
btScalar m_appliedImpulse
Definition: btManifoldPoint.h:118
btPersistentManifoldDoubleData::m_contactProcessingThreshold
double m_contactProcessingThreshold
Definition: btPersistentManifold.h:310
btPersistentManifoldFloatData::m_pointCachePartId1
int m_pointCachePartId1[4]
Definition: btPersistentManifold.h:335
gContactBreakingThreshold
btScalar gContactBreakingThreshold
maximum contact breaking and merging threshold
Definition: btPersistentManifold.cpp:26
btPersistentManifoldDoubleData::m_pointCacheContactCFM
double m_pointCacheContactCFM[4]
Definition: btPersistentManifold.h:296
btPersistentManifoldFloatData::m_pointCacheCombinedFriction
float m_pointCacheCombinedFriction[4]
Definition: btPersistentManifold.h:330
gContactDestroyedCallback
ContactDestroyedCallback gContactDestroyedCallback
Definition: btPersistentManifold.cpp:27
btPersistentManifold::getCacheEntry
int getCacheEntry(const btManifoldPoint &newPoint) const
Definition: btPersistentManifold.cpp:192
btPersistentManifoldFloatData::m_index1a
int m_index1a
Definition: btPersistentManifold.h:353
btManifoldPoint::m_appliedImpulseLateral2
btScalar m_appliedImpulseLateral2
Definition: btManifoldPoint.h:121
btPersistentManifold::getContactBreakingThreshold
btScalar getContactBreakingThreshold() const
Definition: btPersistentManifold.cpp:242
btManifoldPoint::m_combinedFriction
btScalar m_combinedFriction
Definition: btManifoldPoint.h:103
btPersistentManifoldFloatData::m_pointCacheContactMotion2
float m_pointCacheContactMotion2[4]
Definition: btPersistentManifold.h:342
ContactStartedCallback
void(* ContactStartedCallback)(btPersistentManifold *const &manifold)
Definition: btPersistentManifold.h:37
btPersistentManifoldDoubleData::m_pointCacheLocalPointB
btVector3DoubleData m_pointCacheLocalPointB[4]
Definition: btPersistentManifold.h:274
btPersistentManifold::m_body0
const btCollisionObject * m_body0
this two body pointers can point to the physics rigidbody class.
Definition: btPersistentManifold.h:69
btPersistentManifoldDoubleData::m_padding
int m_padding
Definition: btPersistentManifold.h:311