Bullet Collision Detection & Physics Library
btRigidBody.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_RIGIDBODY_H
17 #define BT_RIGIDBODY_H
18 
20 #include "LinearMath/btTransform.h"
23 
24 class btCollisionShape;
25 class btMotionState;
26 class btTypedConstraint;
27 
29 extern bool gDisableDeactivation;
30 
31 #ifdef BT_USE_DOUBLE_PRECISION
32 #define btRigidBodyData btRigidBodyDoubleData
33 #define btRigidBodyDataName "btRigidBodyDoubleData"
34 #else
35 #define btRigidBodyData btRigidBodyFloatData
36 #define btRigidBodyDataName "btRigidBodyFloatData"
37 #endif //BT_USE_DOUBLE_PRECISION
38 
40 {
49 };
50 
60 {
66 
72 
75 
81 
84 
85  //m_optionalMotionState allows to automatic synchronize the world transform for active objects
87 
88  //keep track of typed constraints referencing this rigid body, to disable collision between linked bodies
90 
92 
94 
95 protected:
102 
103 public:
110  {
112 
117 
122 
128  btScalar m_spinningFriction; //torsional friction around contact normal
129 
132 
135 
136  //Additional damping can help avoiding lowpass jitter motion, help stability for ragdolls etc.
137  //Such damping is undesirable, so once the overall simulation quality of the rigid body dynamics system has improved, this should become obsolete
143 
144  btRigidBodyConstructionInfo(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0)) : m_mass(mass),
145  m_motionState(motionState),
146  m_collisionShape(collisionShape),
147  m_localInertia(localInertia),
150  m_friction(btScalar(0.5)),
153  m_restitution(btScalar(0.)),
156  m_additionalDamping(false),
161  {
163  }
164  };
165 
167  btRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
168 
171  btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0));
172 
173  virtual ~btRigidBody()
174  {
175  //No constraints should point to this rigidbody
176  //Remove constraints from the dynamics world before you delete the related rigidbodies.
178  }
179 
180 protected:
182  void setupRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
183 
184 public:
185  void proceedToTransform(const btTransform& newTrans);
186 
189  static const btRigidBody* upcast(const btCollisionObject* colObj)
190  {
192  return (const btRigidBody*)colObj;
193  return 0;
194  }
196  {
198  return (btRigidBody*)colObj;
199  return 0;
200  }
201 
203  void predictIntegratedTransform(btScalar step, btTransform& predictedTransform);
204 
205  void saveKinematicState(btScalar step);
206 
207  void applyGravity();
208 
209  void setGravity(const btVector3& acceleration);
210 
211  const btVector3& getGravity() const
212  {
213  return m_gravity_acceleration;
214  }
215 
216  void setDamping(btScalar lin_damping, btScalar ang_damping);
217 
219  {
220  return m_linearDamping;
221  }
222 
224  {
225  return m_angularDamping;
226  }
227 
229  {
231  }
232 
234  {
236  }
237 
238  void applyDamping(btScalar timeStep);
239 
241  {
242  return m_collisionShape;
243  }
244 
246  {
247  return m_collisionShape;
248  }
249 
250  void setMassProps(btScalar mass, const btVector3& inertia);
251 
252  const btVector3& getLinearFactor() const
253  {
254  return m_linearFactor;
255  }
256  void setLinearFactor(const btVector3& linearFactor)
257  {
258  m_linearFactor = linearFactor;
260  }
261  btScalar getInvMass() const { return m_inverseMass; }
263  {
265  }
266 
267  void integrateVelocities(btScalar step);
268 
269  void setCenterOfMassTransform(const btTransform& xform);
270 
271  void applyCentralForce(const btVector3& force)
272  {
273  m_totalForce += force * m_linearFactor;
274  }
275 
276  const btVector3& getTotalForce() const
277  {
278  return m_totalForce;
279  };
280 
281  const btVector3& getTotalTorque() const
282  {
283  return m_totalTorque;
284  };
285 
287  {
288  return m_invInertiaLocal;
289  };
290 
291  void setInvInertiaDiagLocal(const btVector3& diagInvInertia)
292  {
293  m_invInertiaLocal = diagInvInertia;
294  }
295 
297  {
298  m_linearSleepingThreshold = linear;
299  m_angularSleepingThreshold = angular;
300  }
301 
302  void applyTorque(const btVector3& torque)
303  {
304  m_totalTorque += torque * m_angularFactor;
305  }
306 
307  void applyForce(const btVector3& force, const btVector3& rel_pos)
308  {
309  applyCentralForce(force);
310  applyTorque(rel_pos.cross(force * m_linearFactor));
311  }
312 
313  void applyCentralImpulse(const btVector3& impulse)
314  {
316  }
317 
318  void applyTorqueImpulse(const btVector3& torque)
319  {
321  }
322 
323  void applyImpulse(const btVector3& impulse, const btVector3& rel_pos)
324  {
325  if (m_inverseMass != btScalar(0.))
326  {
327  applyCentralImpulse(impulse);
328  if (m_angularFactor)
329  {
330  applyTorqueImpulse(rel_pos.cross(impulse * m_linearFactor));
331  }
332  }
333  }
334 
335  void clearForces()
336  {
337  m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
338  m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
339  }
340 
341  void updateInertiaTensor();
342 
344  {
345  return m_worldTransform.getOrigin();
346  }
348 
350  {
351  return m_worldTransform;
352  }
354  {
355  return m_linearVelocity;
356  }
358  {
359  return m_angularVelocity;
360  }
361 
362  inline void setLinearVelocity(const btVector3& lin_vel)
363  {
365  m_linearVelocity = lin_vel;
366  }
367 
368  inline void setAngularVelocity(const btVector3& ang_vel)
369  {
371  m_angularVelocity = ang_vel;
372  }
373 
375  {
376  //we also calculate lin/ang velocity for kinematic objects
377  return m_linearVelocity + m_angularVelocity.cross(rel_pos);
378 
379  //for kinematic objects, we could also use use:
380  // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
381  }
382 
383  void translate(const btVector3& v)
384  {
386  }
387 
388  void getAabb(btVector3& aabbMin, btVector3& aabbMax) const;
389 
391  {
392  btVector3 r0 = pos - getCenterOfMassPosition();
393 
394  btVector3 c0 = (r0).cross(normal);
395 
396  btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0);
397 
398  return m_inverseMass + normal.dot(vec);
399  }
400 
402  {
403  btVector3 vec = axis * getInvInertiaTensorWorld();
404  return axis.dot(vec);
405  }
406 
408  {
410  return;
411 
414  {
415  m_deactivationTime += timeStep;
416  }
417  else
418  {
421  }
422  }
423 
425  {
427  return false;
428 
429  //disable deactivation
431  return false;
432 
434  return true;
435 
437  {
438  return true;
439  }
440  return false;
441  }
442 
444  {
445  return m_broadphaseHandle;
446  }
448  {
449  return m_broadphaseHandle;
450  }
452  {
453  m_broadphaseHandle = broadphaseProxy;
454  }
455 
456  //btMotionState allows to automatic synchronize the world transform for active objects
458  {
459  return m_optionalMotionState;
460  }
462  {
463  return m_optionalMotionState;
464  }
465  void setMotionState(btMotionState* motionState)
466  {
467  m_optionalMotionState = motionState;
469  motionState->getWorldTransform(m_worldTransform);
470  }
471 
472  //for experimental overriding of friction/contact solver func
475 
476  void setAngularFactor(const btVector3& angFac)
477  {
479  m_angularFactor = angFac;
480  }
481 
483  {
485  m_angularFactor.setValue(angFac, angFac, angFac);
486  }
488  {
489  return m_angularFactor;
490  }
491 
492  //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
493  bool isInWorld() const
494  {
495  return (getBroadphaseProxy() != 0);
496  }
497 
500 
502  {
503  return m_constraintRefs[index];
504  }
505 
507  {
508  return m_constraintRefs.size();
509  }
510 
511  void setFlags(int flags)
512  {
513  m_rigidbodyFlags = flags;
514  }
515 
516  int getFlags() const
517  {
518  return m_rigidbodyFlags;
519  }
520 
523 
526 
528  btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
529  btVector3 getLocalInertia() const;
530 
532 
533  virtual int calculateSerializeBufferSize() const;
534 
536  virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
537 
538  virtual void serializeSingleObject(class btSerializer* serializer) const;
539 };
540 
541 //@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
544 {
566 };
567 
570 {
592  char m_padding[4];
593 };
594 
595 #endif //BT_RIGIDBODY_H
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:189
const btMotionState * getMotionState() const
Definition: btRigidBody.h:461
btScalar getLinearDamping() const
Definition: btRigidBody.h:218
btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:401
btVector3FloatData m_gravity
Definition: btRigidBody.h:551
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
for serialization
Definition: btMatrix3x3.h:1367
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:390
void translate(const btVector3 &v)
Definition: btRigidBody.h:383
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:357
void applyGravity()
btVector3 m_totalTorque
Definition: btRigidBody.h:71
int m_contactSolverType
Definition: btRigidBody.h:473
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:640
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:281
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:318
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:549
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
void updateInertiaTensor()
btVector3 m_totalForce
Definition: btRigidBody.h:70
btScalar m_angularDamping
Definition: btRigidBody.h:74
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:548
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:349
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
bool wantsSleeping()
Definition: btRigidBody.h:424
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:233
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:580
virtual int calculateSerializeBufferSize() const
btVector3 m_turnVelocity
Definition: btRigidBody.h:101
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:447
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:166
#define btAssert(x)
Definition: btScalar.h:133
btVector3 m_gravity
Definition: btRigidBody.h:67
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:561
btVector3DoubleData m_gravity
Definition: btRigidBody.h:577
#define SIMD_FORCE_INLINE
Definition: btScalar.h:83
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:252
double m_additionalDampingFactor
Definition: btRigidBody.h:585
int getActivationState() const
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:573
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:29
void setDamping(btScalar lin_damping, btScalar ang_damping)
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:83
btQuaternion getOrientation() const
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:256
bool m_additionalDamping
Definition: btRigidBody.h:76
float m_linearSleepingThreshold
Definition: btRigidBody.h:563
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:78
int m_rigidbodyFlags
Definition: btRigidBody.h:91
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:296
float m_additionalDampingFactor
Definition: btRigidBody.h:559
btTransform m_worldTransform
#define ISLAND_SLEEPING
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:487
btScalar m_rollingFriction
the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling f...
Definition: btRigidBody.h:127
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:560
btCollisionShape * m_collisionShape
btVector3 m_pushVelocity
Definition: btRigidBody.h:100
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:545
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:576
btVector3FloatData m_totalForce
Definition: btRigidBody.h:554
const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:240
btScalar m_inverseMass
Definition: btRigidBody.h:64
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:271
BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
Definition: btRigidBody.h:45
void integrateVelocities(btScalar step)
void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:407
btVector3 m_invInertiaLocal
Definition: btRigidBody.h:69
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:588
btVector3 m_deltaLinearVelocity
Definition: btRigidBody.h:96
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:302
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:286
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:113
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:353
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:40
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:572
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:569
void setFlags(int flags)
Definition: btRigidBody.h:511
void addConstraintRef(btTypedConstraint *c)
btScalar getInvMass() const
Definition: btRigidBody.h:261
const btBroadphaseProxy * getBroadphaseProxy() const
Definition: btRigidBody.h:443
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:380
btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:229
btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:245
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:562
btRigidBodyFlags
Definition: btRigidBody.h:39
btMotionState * m_optionalMotionState
Definition: btRigidBody.h:86
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:131
btCollisionObject can be used to manage collision detection objects.
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:82
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:362
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:59
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:228
int getFlags() const
Definition: btRigidBody.h:516
btVector3 m_angularFactor
Definition: btRigidBody.h:98
void clearForces()
Definition: btRigidBody.h:335
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:579
The btRigidBodyConstructionInfo structure provides information to create a rigid body.
Definition: btRigidBody.h:109
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:543
btVector3 m_angularVelocity
Definition: btRigidBody.h:63
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:575
void proceedToTransform(const btTransform &newTrans)
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:77
int m_updateRevision
internal update revision number. It will be increased when the object changes. This allows some subsy...
btScalar m_linearDamping
Definition: btRigidBody.h:73
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
btRigidBodyConstructionInfo(btScalar mass, btMotionState *motionState, btCollisionShape *collisionShape, const btVector3 &localInertia=btVector3(0, 0, 0))
Definition: btRigidBody.h:144
btVector3 m_linearFactor
Definition: btRigidBody.h:65
btVector3 m_linearVelocity
Definition: btRigidBody.h:62
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:80
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:84
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:574
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:482
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:307
int size() const
return the number of elements in the array
int m_debugBodyId
Definition: btRigidBody.h:93
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:555
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:546
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:374
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:28
void setCenterOfMassTransform(const btTransform &xform)
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:501
void setMassProps(btScalar mass, const btVector3 &inertia)
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:587
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping ...
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:343
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:571
#define WANTS_DEACTIVATION
double m_linearSleepingThreshold
Definition: btRigidBody.h:589
TypedConstraint is the baseclass for Bullet constraints and vehicles.
The btMotionState interface class allows the dynamics world to synchronize and interpolate the update...
Definition: btMotionState.h:23
void saveKinematicState(btScalar step)
int getInternalType() const
reserved for Bullet internal usage
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:368
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:291
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:578
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:465
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:547
#define DISABLE_DEACTIVATION
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:313
const btVector3 & getGravity() const
Definition: btRigidBody.h:211
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:79
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:46
btMotionState * getMotionState()
Definition: btRigidBody.h:457
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:276
btVector3 m_gravity_acceleration
Definition: btRigidBody.h:68
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:80
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:323
for serialization
Definition: btMatrix3x3.h:1373
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:262
btBroadphaseProxy * m_broadphaseHandle
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:49
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:451
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:553
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:581
float m_angularSleepingThreshold
Definition: btRigidBody.h:564
virtual ~btRigidBody()
Definition: btRigidBody.h:173
btAlignedObjectArray< btTypedConstraint * > m_constraintRefs
Definition: btRigidBody.h:89
double m_angularSleepingThreshold
Definition: btRigidBody.h:590
int m_frictionSolverType
Definition: btRigidBody.h:474
void removeConstraintRef(btTypedConstraint *c)
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:97
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:586
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:476
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:195
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:552
btMotionState * m_motionState
When a motionState is provided, the rigid body will initialize its world transform from the motion st...
Definition: btRigidBody.h:115
void setActivationState(int newState) const
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:124
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btVector3 m_invMass
Definition: btRigidBody.h:99
virtual void serializeSingleObject(class btSerializer *serializer) const
btVector3 getLocalInertia() const
virtual void getWorldTransform(btTransform &worldTrans) const =0
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:294
btScalar getAngularDamping() const
Definition: btRigidBody.h:223
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:550
btMatrix3x3 m_invInertiaTensorWorld
Definition: btRigidBody.h:61
void setGravity(const btVector3 &acceleration)
bool isInWorld() const
Definition: btRigidBody.h:493
int getNumConstraintRefs() const
Definition: btRigidBody.h:506