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 clearGravity();
210 
211  void setGravity(const btVector3& acceleration);
212 
213  const btVector3& getGravity() const
214  {
215  return m_gravity_acceleration;
216  }
217 
218  void setDamping(btScalar lin_damping, btScalar ang_damping);
219 
221  {
222  return m_linearDamping;
223  }
224 
226  {
227  return m_angularDamping;
228  }
229 
231  {
233  }
234 
236  {
238  }
239 
240  void applyDamping(btScalar timeStep);
241 
243  {
244  return m_collisionShape;
245  }
246 
248  {
249  return m_collisionShape;
250  }
251 
252  void setMassProps(btScalar mass, const btVector3& inertia);
253 
254  const btVector3& getLinearFactor() const
255  {
256  return m_linearFactor;
257  }
258  void setLinearFactor(const btVector3& linearFactor)
259  {
260  m_linearFactor = linearFactor;
262  }
263  btScalar getInvMass() const { return m_inverseMass; }
264  btScalar getMass() const { return m_inverseMass == btScalar(0.) ? btScalar(0.) : btScalar(1.0) / m_inverseMass; }
266  {
268  }
269 
270  void integrateVelocities(btScalar step);
271 
272  void setCenterOfMassTransform(const btTransform& xform);
273 
274  void applyCentralForce(const btVector3& force)
275  {
276  m_totalForce += force * m_linearFactor;
277  }
278 
279  const btVector3& getTotalForce() const
280  {
281  return m_totalForce;
282  };
283 
284  const btVector3& getTotalTorque() const
285  {
286  return m_totalTorque;
287  };
288 
290  {
291  return m_invInertiaLocal;
292  };
293 
294  void setInvInertiaDiagLocal(const btVector3& diagInvInertia)
295  {
296  m_invInertiaLocal = diagInvInertia;
297  }
298 
300  {
301  m_linearSleepingThreshold = linear;
302  m_angularSleepingThreshold = angular;
303  }
304 
305  void applyTorque(const btVector3& torque)
306  {
307  m_totalTorque += torque * m_angularFactor;
308  }
309 
310  void applyForce(const btVector3& force, const btVector3& rel_pos)
311  {
312  applyCentralForce(force);
313  applyTorque(rel_pos.cross(force * m_linearFactor));
314  }
315 
316  void applyCentralImpulse(const btVector3& impulse)
317  {
319  }
320 
321  void applyTorqueImpulse(const btVector3& torque)
322  {
324  }
325 
326  void applyImpulse(const btVector3& impulse, const btVector3& rel_pos)
327  {
328  if (m_inverseMass != btScalar(0.))
329  {
330  applyCentralImpulse(impulse);
331  if (m_angularFactor)
332  {
333  applyTorqueImpulse(rel_pos.cross(impulse * m_linearFactor));
334  }
335  }
336  }
337 
338  void applyPushImpulse(const btVector3& impulse, const btVector3& rel_pos)
339  {
340  if (m_inverseMass != btScalar(0.))
341  {
342  applyCentralPushImpulse(impulse);
343  if (m_angularFactor)
344  {
345  applyTorqueTurnImpulse(rel_pos.cross(impulse * m_linearFactor));
346  }
347  }
348  }
349 
351  {
352  return m_pushVelocity;
353  }
354 
356  {
357  return m_turnVelocity;
358  }
359 
360  void setPushVelocity(const btVector3& v)
361  {
362  m_pushVelocity = v;
363  }
364 
365  void setTurnVelocity(const btVector3& v)
366  {
367  m_turnVelocity = v;
368  }
369 
370  void applyCentralPushImpulse(const btVector3& impulse)
371  {
373  }
374 
375  void applyTorqueTurnImpulse(const btVector3& torque)
376  {
378  }
379 
380  void clearForces()
381  {
382  m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
383  m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
384  }
385 
386  void updateInertiaTensor();
387 
389  {
390  return m_worldTransform.getOrigin();
391  }
393 
395  {
396  return m_worldTransform;
397  }
399  {
400  return m_linearVelocity;
401  }
403  {
404  return m_angularVelocity;
405  }
406 
407  inline void setLinearVelocity(const btVector3& lin_vel)
408  {
410  m_linearVelocity = lin_vel;
411  }
412 
413  inline void setAngularVelocity(const btVector3& ang_vel)
414  {
416  m_angularVelocity = ang_vel;
417  }
418 
420  {
421  //we also calculate lin/ang velocity for kinematic objects
422  return m_linearVelocity + m_angularVelocity.cross(rel_pos);
423 
424  //for kinematic objects, we could also use use:
425  // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
426  }
427 
428  void translate(const btVector3& v)
429  {
431  }
432 
433  void getAabb(btVector3& aabbMin, btVector3& aabbMax) const;
434 
436  {
437  btVector3 r0 = pos - getCenterOfMassPosition();
438 
439  btVector3 c0 = (r0).cross(normal);
440 
441  btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0);
442 
443  return m_inverseMass + normal.dot(vec);
444  }
445 
447  {
448  btVector3 vec = axis * getInvInertiaTensorWorld();
449  return axis.dot(vec);
450  }
451 
453  {
455  return;
456 
459  {
460  m_deactivationTime += timeStep;
461  }
462  else
463  {
466  }
467  }
468 
470  {
472  return false;
473 
474  //disable deactivation
476  return false;
477 
479  return true;
480 
482  {
483  return true;
484  }
485  return false;
486  }
487 
489  {
490  return m_broadphaseHandle;
491  }
493  {
494  return m_broadphaseHandle;
495  }
497  {
498  m_broadphaseHandle = broadphaseProxy;
499  }
500 
501  //btMotionState allows to automatic synchronize the world transform for active objects
503  {
504  return m_optionalMotionState;
505  }
507  {
508  return m_optionalMotionState;
509  }
510  void setMotionState(btMotionState* motionState)
511  {
512  m_optionalMotionState = motionState;
514  motionState->getWorldTransform(m_worldTransform);
515  }
516 
517  //for experimental overriding of friction/contact solver func
520 
521  void setAngularFactor(const btVector3& angFac)
522  {
524  m_angularFactor = angFac;
525  }
526 
528  {
530  m_angularFactor.setValue(angFac, angFac, angFac);
531  }
533  {
534  return m_angularFactor;
535  }
536 
537  //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
538  bool isInWorld() const
539  {
540  return (getBroadphaseProxy() != 0);
541  }
542 
545 
547  {
548  return m_constraintRefs[index];
549  }
550 
552  {
553  return m_constraintRefs.size();
554  }
555 
556  void setFlags(int flags)
557  {
558  m_rigidbodyFlags = flags;
559  }
560 
561  int getFlags() const
562  {
563  return m_rigidbodyFlags;
564  }
565 
568 
571 
573  btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
574  btVector3 getLocalInertia() const;
575 
577 
578  virtual int calculateSerializeBufferSize() const;
579 
581  virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
582 
583  virtual void serializeSingleObject(class btSerializer* serializer) const;
584 };
585 
586 //@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
589 {
611 };
612 
615 {
637  char m_padding[4];
638 };
639 
640 #endif //BT_RIGIDBODY_H
btMatrix3x3DoubleData
for serialization
Definition: btMatrix3x3.h:1380
btRigidBodyDoubleData::m_invInertiaTensorWorld
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:617
btRigidBody::getAngularDamping
btScalar getAngularDamping() const
Definition: btRigidBody.h:225
btTypedConstraint
TypedConstraint is the baseclass for Bullet constraints and vehicles.
Definition: btTypedConstraint.h:74
btRigidBody::applyGravity
void applyGravity()
Definition: btRigidBody.cpp:201
btRigidBodyFloatData::m_additionalAngularDampingFactor
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:607
btCollisionObject
btCollisionObject can be used to manage collision detection objects.
Definition: btCollisionObject.h:48
btRigidBody::btRigidBodyConstructionInfo::m_linearDamping
btScalar m_linearDamping
Definition: btRigidBody.h:120
btRigidBody::m_invInertiaTensorWorld
btMatrix3x3 m_invInertiaTensorWorld
Definition: btRigidBody.h:61
btBroadphaseProxy
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
Definition: btBroadphaseProxy.h:84
btRigidBody
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:59
btRigidBody::m_turnVelocity
btVector3 m_turnVelocity
Definition: btRigidBody.h:101
btRigidBody::getTotalTorque
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:284
btRigidBody::setAngularFactor
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:521
btRigidBodyFloatData::m_invInertiaLocal
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:598
btRigidBody::btRigidBodyConstructionInfo::m_angularSleepingThreshold
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:134
btRigidBody::btRigidBodyConstructionInfo::m_angularDamping
btScalar m_angularDamping
Definition: btRigidBody.h:121
BT_ENABLE_GYROPSCOPIC_FORCE
Definition: btRigidBody.h:48
BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT
BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
Definition: btRigidBody.h:45
btRigidBody::predictIntegratedTransform
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
Definition: btRigidBody.cpp:100
DISABLE_DEACTIVATION
#define DISABLE_DEACTIVATION
Definition: btCollisionObject.h:25
btRigidBody::m_angularDamping
btScalar m_angularDamping
Definition: btRigidBody.h:74
btRigidBodyDoubleData::m_gravity_acceleration
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:623
btRigidBody::btRigidBodyConstructionInfo::m_additionalAngularDampingThresholdSqr
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:141
btRigidBody::serialize
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
Definition: btRigidBody.cpp:458
btQuaternion
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:49
btRigidBodyFloatData::m_linearDamping
float m_linearDamping
Definition: btRigidBody.h:602
gDeactivationTime
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
btRigidBody::serializeSingleObject
virtual void serializeSingleObject(class btSerializer *serializer) const
Definition: btRigidBody.cpp:493
btVector3::setValue
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:640
btRigidBody::btRigidBodyConstructionInfo::m_additionalLinearDampingThresholdSqr
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:140
btRigidBody::getAngularVelocity
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:402
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
btRigidBody::m_totalTorque
btVector3 m_totalTorque
Definition: btRigidBody.h:71
btRigidBodyFloatData::m_gravity
btVector3FloatData m_gravity
Definition: btRigidBody.h:596
btRigidBody::m_additionalDamping
bool m_additionalDamping
Definition: btRigidBody.h:76
btRigidBody::btRigidBodyConstructionInfo::m_mass
btScalar m_mass
Definition: btRigidBody.h:111
btRigidBody::m_contactSolverType
int m_contactSolverType
Definition: btRigidBody.h:518
btRigidBody::m_rigidbodyFlags
int m_rigidbodyFlags
Definition: btRigidBody.h:91
btCollisionObjectDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:603
btRigidBody::setGravity
void setGravity(const btVector3 &acceleration)
Definition: btRigidBody.cpp:128
btRigidBody::isInWorld
bool isInWorld() const
Definition: btRigidBody.h:538
btRigidBody::getBroadphaseProxy
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:492
btRigidBody::setSleepingThresholds
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:299
btRigidBody::getNumConstraintRefs
int getNumConstraintRefs() const
Definition: btRigidBody.h:551
btRigidBody::computeGyroscopicForceExplicit
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
Definition: btRigidBody.cpp:279
btCollisionObjectFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:638
btRigidBody::getLinearDamping
btScalar getLinearDamping() const
Definition: btRigidBody.h:220
btVector3::cross
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:380
btRigidBodyFloatData::m_additionalLinearDampingThresholdSqr
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:605
btRigidBody::updateInertiaTensor
void updateInertiaTensor()
Definition: btRigidBody.cpp:245
btRigidBody::getAabb
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
Definition: btRigidBody.cpp:123
btRigidBodyFloatData::m_linearFactor
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:595
btMotionState::getWorldTransform
virtual void getWorldTransform(btTransform &worldTrans) const =0
btRigidBodyDoubleData::m_angularFactor
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:620
btRigidBodyFloatData::m_totalForce
btVector3FloatData m_totalForce
Definition: btRigidBody.h:599
btRigidBodyDoubleData::m_invInertiaLocal
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:624
btRigidBody::m_inverseMass
btScalar m_inverseMass
Definition: btRigidBody.h:64
btRigidBodyDoubleData::m_collisionObjectData
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:616
btRigidBody::translate
void translate(const btVector3 &v)
Definition: btRigidBody.h:428
btRigidBodyDoubleData::m_additionalAngularDampingThresholdSqr
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:632
btRigidBody::integrateVelocities
void integrateVelocities(btScalar step)
Definition: btRigidBody.cpp:368
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD
Definition: btRigidBody.h:46
btVector3::dot
btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:229
btRigidBody::getAngularSleepingThreshold
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:235
btCollisionObject::getActivationState
int getActivationState() const
Definition: btCollisionObject.h:277
btCollisionObject::m_worldTransform
btTransform m_worldTransform
Definition: btCollisionObject.h:52
btRigidBody::computeGyroscopicImpulseImplicit_World
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
Definition: btRigidBody.cpp:332
btRigidBodyFloatData::m_angularDamping
float m_angularDamping
Definition: btRigidBody.h:603
btRigidBodyDoubleData::m_linearSleepingThreshold
double m_linearSleepingThreshold
Definition: btRigidBody.h:634
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
Definition: btRigidBody.h:47
btRigidBody::applyTorqueImpulse
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:321
btRigidBody::m_gravity
btVector3 m_gravity
Definition: btRigidBody.h:67
btRigidBodyFloatData::m_angularFactor
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:594
btRigidBody::btRigidBodyConstructionInfo::m_spinningFriction
btScalar m_spinningFriction
Definition: btRigidBody.h:128
btRigidBodyDoubleData::m_padding
char m_padding[4]
Definition: btRigidBody.h:637
btRigidBody::getCenterOfMassTransform
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:394
btRigidBody::btRigidBodyConstructionInfo::m_startWorldTransform
btTransform m_startWorldTransform
Definition: btRigidBody.h:116
btCollisionObject::m_deactivationTime
btScalar m_deactivationTime
Definition: btCollisionObject.h:83
btRigidBody::wantsSleeping
bool wantsSleeping()
Definition: btRigidBody.h:469
btVector3FloatData
Definition: btVector3.h:1281
btRigidBody::setDamping
void setDamping(btScalar lin_damping, btScalar ang_damping)
Definition: btRigidBody.cpp:137
btRigidBody::m_angularSleepingThreshold
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:83
btTransform::setIdentity
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:166
btRigidBody::setLinearFactor
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:258
btRigidBody::getOrientation
btQuaternion getOrientation() const
Definition: btRigidBody.cpp:385
btRigidBodyDoubleData::m_angularSleepingThreshold
double m_angularSleepingThreshold
Definition: btRigidBody.h:635
gDisableDeactivation
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
btRigidBody::m_additionalLinearDampingThresholdSqr
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:78
btRigidBody::m_optionalMotionState
btMotionState * m_optionalMotionState
Definition: btRigidBody.h:86
btRigidBody::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btRigidBody.cpp:451
btRigidBody::clearGravity
void clearGravity()
Definition: btRigidBody.cpp:209
btRigidBody::getInvInertiaDiagLocal
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:289
btCollisionObject::CO_RIGID_BODY
Definition: btCollisionObject.h:146
btRigidBody::setLinearVelocity
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:407
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
Definition: btCollisionShape.h:26
ISLAND_SLEEPING
#define ISLAND_SLEEPING
Definition: btCollisionObject.h:23
btAssert
#define btAssert(x)
Definition: btScalar.h:153
btCollisionObject::m_collisionShape
btCollisionShape * m_collisionShape
Definition: btCollisionObject.h:67
btRigidBody::setupRigidBody
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:40
btRigidBody::m_angularFactor
btVector3 m_angularFactor
Definition: btRigidBody.h:98
btRigidBodyFloatData::m_inverseMass
float m_inverseMass
Definition: btRigidBody.h:601
btRigidBody::clearForces
void clearForces()
Definition: btRigidBody.h:380
btRigidBody::getCollisionShape
const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:242
btRigidBody::getLinearFactor
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:254
btRigidBody::btRigidBodyConstructionInfo::m_restitution
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:131
btVector3DoubleData
Definition: btVector3.h:1286
btRigidBody::setFlags
void setFlags(int flags)
Definition: btRigidBody.h:556
btRigidBody::applyCentralForce
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:274
btRigidBody::proceedToTransform
void proceedToTransform(const btTransform &newTrans)
Definition: btRigidBody.cpp:217
btRigidBody::updateDeactivation
void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:452
btRigidBodyDoubleData::m_additionalDamping
int m_additionalDamping
Definition: btRigidBody.h:636
btRigidBody::btRigidBodyConstructionInfo::m_friction
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:124
btRigidBodyDoubleData::m_additionalLinearDampingThresholdSqr
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:631
btRigidBody::btRigidBody
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:29
btRigidBody::getCollisionShape
btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:247
btRigidBody::m_linearFactor
btVector3 m_linearFactor
Definition: btRigidBody.h:65
btRigidBody::getAngularFactor
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:532
btRigidBody::applyTorque
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:305
btRigidBody::m_pushVelocity
btVector3 m_pushVelocity
Definition: btRigidBody.h:100
btRigidBodyDoubleData::m_totalTorque
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:626
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:46
btRigidBody::m_angularVelocity
btVector3 m_angularVelocity
Definition: btRigidBody.h:63
btTransform.h
btRigidBody::getInvMass
btScalar getInvMass() const
Definition: btRigidBody.h:263
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:28
btMotionState
The btMotionState interface class allows the dynamics world to synchronize and interpolate the update...
Definition: btMotionState.h:23
btRigidBody::getBroadphaseProxy
const btBroadphaseProxy * getBroadphaseProxy() const
Definition: btRigidBody.h:488
btRigidBody::btRigidBodyConstructionInfo::m_additionalDamping
bool m_additionalDamping
Definition: btRigidBody.h:138
btRigidBody::btRigidBodyConstructionInfo::m_localInertia
btVector3 m_localInertia
Definition: btRigidBody.h:119
btRigidBody::m_invInertiaLocal
btVector3 m_invInertiaLocal
Definition: btRigidBody.h:69
btRigidBodyDoubleData::m_totalForce
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:625
btRigidBodyFloatData::m_collisionObjectData
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:590
btRigidBody::getMass
btScalar getMass() const
Definition: btRigidBody.h:264
btRigidBodyFloatData::m_angularSleepingThreshold
float m_angularSleepingThreshold
Definition: btRigidBody.h:609
btRigidBody::saveKinematicState
void saveKinematicState(btScalar step)
Definition: btRigidBody.cpp:105
btRigidBodyFloatData::m_totalTorque
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:600
btRigidBody::getTurnVelocity
btVector3 getTurnVelocity()
Definition: btRigidBody.h:355
btRigidBodyFlags
btRigidBodyFlags
Definition: btRigidBody.h:39
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:80
BT_DISABLE_WORLD_GRAVITY
Definition: btRigidBody.h:41
btRigidBody::m_deltaLinearVelocity
btVector3 m_deltaLinearVelocity
Definition: btRigidBody.h:96
btRigidBody::m_linearSleepingThreshold
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:82
btTransform::getOrigin
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:113
btRigidBody::getLinearVelocity
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:398
btRigidBody::getVelocityInLocalPoint
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:419
btRigidBody::getLinearSleepingThreshold
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:230
btRigidBody::getFlags
int getFlags() const
Definition: btRigidBody.h:561
btRigidBodyDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:614
btRigidBody::applyDamping
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
Definition: btRigidBody.cpp:144
btRigidBodyFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:588
btRigidBody::addConstraintRef
void addConstraintRef(btTypedConstraint *c)
Definition: btRigidBody.cpp:408
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:99
btRigidBody::m_additionalAngularDampingThresholdSqr
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:79
btCollisionObject::m_updateRevision
int m_updateRevision
internal update revision number. It will be increased when the object changes. This allows some subsy...
Definition: btCollisionObject.h:121
btAlignedObjectArray< btTypedConstraint * >
btRigidBody::setAngularFactor
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:527
btRigidBody::applyPushImpulse
void applyPushImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:338
btRigidBody::applyForce
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:310
btRigidBody::setAngularVelocity
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:413
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:98
btRigidBody::m_debugBodyId
int m_debugBodyId
Definition: btRigidBody.h:93
btBroadphaseProxy.h
btRigidBody::setNewBroadphaseProxy
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:496
btSerializer
Definition: btSerializer.h:65
btRigidBody::applyTorqueTurnImpulse
void applyTorqueTurnImpulse(const btVector3 &torque)
Definition: btRigidBody.h:375
btRigidBody::setMassProps
void setMassProps(btScalar mass, const btVector3 &inertia)
Definition: btRigidBody.cpp:222
btRigidBodyDoubleData::m_angularDamping
double m_angularDamping
Definition: btRigidBody.h:629
btRigidBody::btRigidBodyConstructionInfo::m_additionalDampingFactor
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:139
btRigidBody::btRigidBodyConstructionInfo::m_collisionShape
btCollisionShape * m_collisionShape
Definition: btRigidBody.h:118
btRigidBody::applyCentralImpulse
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:316
btRigidBody::m_constraintRefs
btAlignedObjectArray< btTypedConstraint * > m_constraintRefs
Definition: btRigidBody.h:89
btRigidBodyDoubleData::m_linearVelocity
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:618
btRigidBody::m_additionalDampingFactor
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:77
btRigidBody::m_frictionSolverType
int m_frictionSolverType
Definition: btRigidBody.h:519
btRigidBody::m_linearDamping
btScalar m_linearDamping
Definition: btRigidBody.h:73
btRigidBodyFloatData::m_linearSleepingThreshold
float m_linearSleepingThreshold
Definition: btRigidBody.h:608
btRigidBody::m_linearVelocity
btVector3 m_linearVelocity
Definition: btRigidBody.h:62
btRigidBody::setPushVelocity
void setPushVelocity(const btVector3 &v)
Definition: btRigidBody.h:360
btCollisionObject::getInternalType
int getInternalType() const
reserved for Bullet internal usage
Definition: btCollisionObject.h:362
btRigidBody::getPushVelocity
btVector3 getPushVelocity()
Definition: btRigidBody.h:350
btRigidBodyFloatData::m_angularVelocity
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:593
btRigidBodyDoubleData::m_additionalAngularDampingFactor
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:633
btCollisionObject::m_broadphaseHandle
btBroadphaseProxy * m_broadphaseHandle
Definition: btCollisionObject.h:66
btRigidBody::btRigidBodyConstructionInfo::m_motionState
btMotionState * m_motionState
When a motionState is provided, the rigid body will initialize its world transform from the motion st...
Definition: btRigidBody.h:115
btRigidBodyFloatData::m_linearVelocity
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:592
btRigidBody::m_gravity_acceleration
btVector3 m_gravity_acceleration
Definition: btRigidBody.h:68
btRigidBody::getInvInertiaTensorWorld
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:265
btRigidBody::setInvInertiaDiagLocal
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:294
btRigidBody::setMotionState
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:510
WANTS_DEACTIVATION
#define WANTS_DEACTIVATION
Definition: btCollisionObject.h:24
btRigidBody::setCenterOfMassTransform
void setCenterOfMassTransform(const btTransform &xform)
Definition: btRigidBody.cpp:392
btCollisionObject.h
btRigidBody::getConstraintRef
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:546
btRigidBodyFloatData::m_additionalAngularDampingThresholdSqr
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:606
btRigidBody::getCenterOfMassPosition
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:388
btRigidBodyFloatData::m_additionalDampingFactor
float m_additionalDampingFactor
Definition: btRigidBody.h:604
btRigidBody::btRigidBodyConstructionInfo::m_additionalAngularDampingFactor
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:142
btRigidBody::btRigidBodyConstructionInfo::m_rollingFriction
btScalar m_rollingFriction
the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling f...
Definition: btRigidBody.h:127
btAlignedObjectArray.h
btRigidBody::m_deltaAngularVelocity
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:97
btRigidBody::upcast
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:195
btRigidBody::btRigidBodyConstructionInfo
The btRigidBodyConstructionInfo structure provides information to create a rigid body.
Definition: btRigidBody.h:109
btRigidBody::getMotionState
const btMotionState * getMotionState() const
Definition: btRigidBody.h:506
btRigidBodyFloatData::m_invInertiaTensorWorld
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:591
btRigidBodyDoubleData::m_inverseMass
double m_inverseMass
Definition: btRigidBody.h:627
btRigidBody::setTurnVelocity
void setTurnVelocity(const btVector3 &v)
Definition: btRigidBody.h:365
btRigidBody::getTotalForce
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:279
btRigidBody::applyImpulse
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:326
btRigidBody::m_additionalAngularDampingFactor
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:80
btRigidBodyFloatData::m_gravity_acceleration
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:597
btRigidBodyDoubleData::m_gravity
btVector3DoubleData m_gravity
Definition: btRigidBody.h:622
btMatrix3x3FloatData
for serialization
Definition: btMatrix3x3.h:1374
btRigidBodyFloatData::m_additionalDamping
int m_additionalDamping
Definition: btRigidBody.h:610
btRigidBodyDoubleData::m_additionalDampingFactor
double m_additionalDampingFactor
Definition: btRigidBody.h:630
btRigidBodyDoubleData::m_linearDamping
double m_linearDamping
Definition: btRigidBody.h:628
btRigidBody::computeImpulseDenominator
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:435
btRigidBody::~btRigidBody
virtual ~btRigidBody()
Definition: btRigidBody.h:173
btRigidBody::applyCentralPushImpulse
void applyCentralPushImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:370
btRigidBody::btRigidBodyConstructionInfo::btRigidBodyConstructionInfo
btRigidBodyConstructionInfo(btScalar mass, btMotionState *motionState, btCollisionShape *collisionShape, const btVector3 &localInertia=btVector3(0, 0, 0))
Definition: btRigidBody.h:144
btRigidBody::removeConstraintRef
void removeConstraintRef(btTypedConstraint *c)
Definition: btRigidBody.cpp:431
btRigidBody::getGravity
const btVector3 & getGravity() const
Definition: btRigidBody.h:213
btRigidBody::upcast
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
btRigidBody::btRigidBodyConstructionInfo::m_linearSleepingThreshold
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:133
btRigidBody::computeAngularImpulseDenominator
btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:446
btRigidBody::getMotionState
btMotionState * getMotionState()
Definition: btRigidBody.h:502
btCollisionObject::setActivationState
void setActivationState(int newState) const
Definition: btCollisionObject.cpp:61
btAlignedObjectArray::size
int size() const
return the number of elements in the array
Definition: btAlignedObjectArray.h:142
btRigidBody::m_totalForce
btVector3 m_totalForce
Definition: btRigidBody.h:70
btRigidBodyDoubleData::m_linearFactor
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:621
btRigidBodyDoubleData::m_angularVelocity
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:619
btRigidBody::computeGyroscopicImpulseImplicit_Body
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
Definition: btRigidBody.cpp:293
btRigidBody::m_invMass
btVector3 m_invMass
Definition: btRigidBody.h:99
btRigidBody::getLocalInertia
btVector3 getLocalInertia() const
Definition: btRigidBody.cpp:250