Bullet Collision Detection & Physics Library
btRigidBody.h
Go to the documentation of this file.
1/*
2Bullet Continuous Collision Detection and Physics Library
3Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
4
5This software is provided 'as-is', without any express or implied warranty.
6In no event will the authors be held liable for any damages arising from the use of this software.
7Permission is granted to anyone to use this software for any purpose,
8including commercial applications, and to alter it and redistribute it freely,
9subject to the following restrictions:
10
111. 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.
122. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
133. This notice may not be removed or altered from any source distribution.
14*/
15
16#ifndef BT_RIGIDBODY_H
17#define BT_RIGIDBODY_H
18
23
25class btMotionState;
27
28
30extern bool gDisableDeactivation;
31
32#ifdef BT_USE_DOUBLE_PRECISION
33#define btRigidBodyData btRigidBodyDoubleData
34#define btRigidBodyDataName "btRigidBodyDoubleData"
35#else
36#define btRigidBodyData btRigidBodyFloatData
37#define btRigidBodyDataName "btRigidBodyFloatData"
38#endif //BT_USE_DOUBLE_PRECISION
39
40
42{
51};
52
53
63{
64
70
76
79
85
86
89
90 //m_optionalMotionState allows to automatic synchronize the world transform for active objects
92
93 //keep track of typed constraints referencing this rigid body, to disable collision between linked bodies
95
97
99
100
101protected:
102
109
110
111public:
112
113
120 {
122
127
132
138 btScalar m_spinningFriction;//torsional friction around contact normal
139
142
145
146 //Additional damping can help avoiding lowpass jitter motion, help stability for ragdolls etc.
147 //Such damping is undesirable, so once the overall simulation quality of the rigid body dynamics system has improved, this should become obsolete
153
154 btRigidBodyConstructionInfo( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0)):
155 m_mass(mass),
156 m_motionState(motionState),
157 m_collisionShape(collisionShape),
158 m_localInertia(localInertia),
161 m_friction(btScalar(0.5)),
167 m_additionalDamping(false),
172 {
174 }
175 };
176
178 btRigidBody( const btRigidBodyConstructionInfo& constructionInfo);
179
182 btRigidBody( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0));
183
184
185 virtual ~btRigidBody()
186 {
187 //No constraints should point to this rigidbody
188 //Remove constraints from the dynamics world before you delete the related rigidbodies.
189 btAssert(m_constraintRefs.size()==0);
190 }
191
192protected:
193
195 void setupRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
196
197public:
198
199 void proceedToTransform(const btTransform& newTrans);
200
203 static const btRigidBody* upcast(const btCollisionObject* colObj)
204 {
206 return (const btRigidBody*)colObj;
207 return 0;
208 }
210 {
212 return (btRigidBody*)colObj;
213 return 0;
214 }
215
217 void predictIntegratedTransform(btScalar step, btTransform& predictedTransform) ;
218
219 void saveKinematicState(btScalar step);
220
221 void applyGravity();
222
223 void setGravity(const btVector3& acceleration);
224
225 const btVector3& getGravity() const
226 {
228 }
229
230 void setDamping(btScalar lin_damping, btScalar ang_damping);
231
233 {
234 return m_linearDamping;
235 }
236
238 {
239 return m_angularDamping;
240 }
241
243 {
245 }
246
248 {
250 }
251
252 void applyDamping(btScalar timeStep);
253
255 return m_collisionShape;
256 }
257
259 return m_collisionShape;
260 }
261
262 void setMassProps(btScalar mass, const btVector3& inertia);
263
265 {
266 return m_linearFactor;
267 }
268 void setLinearFactor(const btVector3& linearFactor)
269 {
270 m_linearFactor = linearFactor;
272 }
276 }
277
278 void integrateVelocities(btScalar step);
279
280 void setCenterOfMassTransform(const btTransform& xform);
281
282 void applyCentralForce(const btVector3& force)
283 {
285 }
286
288 {
289 return m_totalForce;
290 };
291
293 {
294 return m_totalTorque;
295 };
296
298 {
299 return m_invInertiaLocal;
300 };
301
302 void setInvInertiaDiagLocal(const btVector3& diagInvInertia)
303 {
304 m_invInertiaLocal = diagInvInertia;
305 }
306
308 {
311 }
312
313 void applyTorque(const btVector3& torque)
314 {
316 }
317
318 void applyForce(const btVector3& force, const btVector3& rel_pos)
319 {
320 applyCentralForce(force);
321 applyTorque(rel_pos.cross(force*m_linearFactor));
322 }
323
324 void applyCentralImpulse(const btVector3& impulse)
325 {
327 }
328
329 void applyTorqueImpulse(const btVector3& torque)
330 {
332 }
333
334 void applyImpulse(const btVector3& impulse, const btVector3& rel_pos)
335 {
336 if (m_inverseMass != btScalar(0.))
337 {
338 applyCentralImpulse(impulse);
339 if (m_angularFactor)
340 {
341 applyTorqueImpulse(rel_pos.cross(impulse*m_linearFactor));
342 }
343 }
344 }
345
347 {
350 }
351
352 void updateInertiaTensor();
353
355 return m_worldTransform.getOrigin();
356 }
358
360 return m_worldTransform;
361 }
362 const btVector3& getLinearVelocity() const {
363 return m_linearVelocity;
364 }
366 return m_angularVelocity;
367 }
368
369
370 inline void setLinearVelocity(const btVector3& lin_vel)
371 {
373 m_linearVelocity = lin_vel;
374 }
375
376 inline void setAngularVelocity(const btVector3& ang_vel)
377 {
379 m_angularVelocity = ang_vel;
380 }
381
383 {
384 //we also calculate lin/ang velocity for kinematic objects
385 return m_linearVelocity + m_angularVelocity.cross(rel_pos);
386
387 //for kinematic objects, we could also use use:
388 // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
389 }
390
391 void translate(const btVector3& v)
392 {
394 }
395
396
397 void getAabb(btVector3& aabbMin,btVector3& aabbMax) const;
398
399
400
401
402
404 {
406
407 btVector3 c0 = (r0).cross(normal);
408
409 btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0);
410
411 return m_inverseMass + normal.dot(vec);
412
413 }
414
416 {
417 btVector3 vec = axis * getInvInertiaTensorWorld();
418 return axis.dot(vec);
419 }
420
422 {
424 return;
425
428 {
429 m_deactivationTime += timeStep;
430 } else
431 {
434 }
435
436 }
437
439 {
440
442 return false;
443
444 //disable deactivation
446 return false;
447
449 return true;
450
452 {
453 return true;
454 }
455 return false;
456 }
457
458
459
461 {
462 return m_broadphaseHandle;
463 }
465 {
466 return m_broadphaseHandle;
467 }
469 {
470 m_broadphaseHandle = broadphaseProxy;
471 }
472
473 //btMotionState allows to automatic synchronize the world transform for active objects
475 {
477 }
479 {
481 }
482 void setMotionState(btMotionState* motionState)
483 {
484 m_optionalMotionState = motionState;
487 }
488
489 //for experimental overriding of friction/contact solver func
492
493 void setAngularFactor(const btVector3& angFac)
494 {
496 m_angularFactor = angFac;
497 }
498
500 {
502 m_angularFactor.setValue(angFac,angFac,angFac);
503 }
505 {
506 return m_angularFactor;
507 }
508
509 //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
510 bool isInWorld() const
511 {
512 return (getBroadphaseProxy() != 0);
513 }
514
517
519 {
520 return m_constraintRefs[index];
521 }
522
524 {
525 return m_constraintRefs.size();
526 }
527
528 void setFlags(int flags)
529 {
530 m_rigidbodyFlags = flags;
531 }
532
533 int getFlags() const
534 {
535 return m_rigidbodyFlags;
536 }
537
538
539
540
543
546
548 btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
550
552
553 virtual int calculateSerializeBufferSize() const;
554
556 virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
557
558 virtual void serializeSingleObject(class btSerializer* serializer) const;
559
560};
561
562//@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
565{
587};
588
591{
613 char m_padding[4];
614};
615
616
617
618#endif //BT_RIGIDBODY_H
619
#define DISABLE_DEACTIVATION
#define WANTS_DEACTIVATION
#define ISLAND_SLEEPING
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
btRigidBodyFlags
Definition: btRigidBody.h:42
@ BT_ENABLE_GYROPSCOPIC_FORCE
Definition: btRigidBody.h:50
@ BT_DISABLE_WORLD_GRAVITY
Definition: btRigidBody.h:43
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
Definition: btRigidBody.h:49
@ BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT
BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
Definition: btRigidBody.h:47
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD
Definition: btRigidBody.h:48
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:82
#define SIMD_FORCE_INLINE
Definition: btScalar.h:81
#define btAssert(x)
Definition: btScalar.h:131
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
btCollisionObject can be used to manage collision detection objects.
int m_updateRevision
internal update revision number. It will be increased when the object changes. This allows some subsy...
btTransform m_worldTransform
btCollisionShape * m_collisionShape
int getInternalType() const
reserved for Bullet internal usage
void setActivationState(int newState) const
btBroadphaseProxy * m_broadphaseHandle
int getActivationState() const
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:48
The btMotionState interface class allows the dynamics world to synchronize and interpolate the update...
Definition: btMotionState.h:24
virtual void getWorldTransform(btTransform &worldTrans) const =0
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:55
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:63
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:329
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:268
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:415
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:84
void applyGravity()
bool wantsSleeping()
Definition: btRigidBody.h:438
void integrateVelocities(btScalar step)
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:382
void addConstraintRef(btTypedConstraint *c)
virtual void serializeSingleObject(class btSerializer *serializer) const
void clearForces()
Definition: btRigidBody.h:346
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:468
btScalar m_linearDamping
Definition: btRigidBody.h:77
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:292
void setFlags(int flags)
Definition: btRigidBody.h:528
int getFlags() const
Definition: btRigidBody.h:533
const btVector3 & getGravity() const
Definition: btRigidBody.h:225
btMatrix3x3 m_invInertiaTensorWorld
Definition: btRigidBody.h:65
int m_frictionSolverType
Definition: btRigidBody.h:491
btVector3 m_invInertiaLocal
Definition: btRigidBody.h:73
btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:258
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:242
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
btMotionState * m_optionalMotionState
Definition: btRigidBody.h:91
btVector3 m_gravity
Definition: btRigidBody.h:71
int m_contactSolverType
Definition: btRigidBody.h:490
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:282
btScalar getInvMass() const
Definition: btRigidBody.h:273
btScalar getAngularDamping() const
Definition: btRigidBody.h:237
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btVector3 m_turnVelocity
Definition: btRigidBody.h:108
void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:421
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:81
virtual int calculateSerializeBufferSize() const
int m_rigidbodyFlags
Definition: btRigidBody.h:96
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:83
void setGravity(const btVector3 &acceleration)
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:264
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:297
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:30
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:87
btQuaternion getOrientation() const
void proceedToTransform(const btTransform &newTrans)
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:359
const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:254
btVector3 m_linearFactor
Definition: btRigidBody.h:69
void saveKinematicState(btScalar step)
btVector3 getLocalInertia() const
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
btVector3 m_angularFactor
Definition: btRigidBody.h:105
btVector3 m_totalForce
Definition: btRigidBody.h:74
btScalar m_inverseMass
Definition: btRigidBody.h:68
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:334
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:324
btVector3 m_totalTorque
Definition: btRigidBody.h:75
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:365
const btMotionState * getMotionState() const
Definition: btRigidBody.h:478
btMotionState * getMotionState()
Definition: btRigidBody.h:474
btScalar m_angularDamping
Definition: btRigidBody.h:78
int getNumConstraintRefs() const
Definition: btRigidBody.h:523
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:209
void removeConstraintRef(btTypedConstraint *c)
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:307
void setMassProps(btScalar mass, const btVector3 &inertia)
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:354
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:104
btVector3 m_pushVelocity
Definition: btRigidBody.h:107
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:247
bool m_additionalDamping
Definition: btRigidBody.h:80
int m_debugBodyId
Definition: btRigidBody.h:98
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:493
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:464
bool isInWorld() const
Definition: btRigidBody.h:510
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:88
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:287
virtual ~btRigidBody()
Definition: btRigidBody.h:185
btScalar getLinearDamping() const
Definition: btRigidBody.h:232
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:504
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:82
btVector3 m_linearVelocity
Definition: btRigidBody.h:66
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:518
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:302
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:376
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:482
void translate(const btVector3 &v)
Definition: btRigidBody.h:391
void setDamping(btScalar lin_damping, btScalar ang_damping)
btVector3 m_deltaLinearVelocity
Definition: btRigidBody.h:103
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:499
btVector3 m_angularVelocity
Definition: btRigidBody.h:67
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:370
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:41
const btBroadphaseProxy * getBroadphaseProxy() const
Definition: btRigidBody.h:460
void setCenterOfMassTransform(const btTransform &xform)
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:403
static const btRigidBody * upcast(const btCollisionObject *colObj)
to keep collision detection and dynamics separate we don't store a rigidbody pointer but a rigidbody ...
Definition: btRigidBody.h:203
btAlignedObjectArray< btTypedConstraint * > m_constraintRefs
Definition: btRigidBody.h:94
void updateInertiaTensor()
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:313
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:318
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:274
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
btVector3 m_invMass
Definition: btRigidBody.h:106
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:362
btVector3 m_gravity_acceleration
Definition: btRigidBody.h:72
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:172
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:117
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:84
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:389
btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:235
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:652
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
for serialization
Definition: btMatrix3x3.h:1309
for serialization
Definition: btMatrix3x3.h:1303
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:591
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:595
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:592
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:601
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:597
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:600
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:602
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:607
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:596
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:593
double m_angularSleepingThreshold
Definition: btRigidBody.h:611
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:594
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:608
btVector3DoubleData m_gravity
Definition: btRigidBody.h:598
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:609
double m_linearSleepingThreshold
Definition: btRigidBody.h:610
double m_additionalDampingFactor
Definition: btRigidBody.h:606
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:599
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:565
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:576
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:571
btVector3FloatData m_totalForce
Definition: btRigidBody.h:575
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:569
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:570
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:574
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:567
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:581
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:583
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:566
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:568
float m_angularSleepingThreshold
Definition: btRigidBody.h:585
btVector3FloatData m_gravity
Definition: btRigidBody.h:572
float m_additionalDampingFactor
Definition: btRigidBody.h:580
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:573
float m_linearSleepingThreshold
Definition: btRigidBody.h:584
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:582
The btRigidBodyConstructionInfo structure provides information to create a rigid body.
Definition: btRigidBody.h:120
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:134
btRigidBodyConstructionInfo(btScalar mass, btMotionState *motionState, btCollisionShape *collisionShape, const btVector3 &localInertia=btVector3(0, 0, 0))
Definition: btRigidBody.h:154
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:141
btMotionState * m_motionState
When a motionState is provided, the rigid body will initialize its world transform from the motion st...
Definition: btRigidBody.h:125
btScalar m_rollingFriction
the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling f...
Definition: btRigidBody.h:137