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 
28 
30 extern 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 
101 protected:
102 
109 
110 
111 public:
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)),
164  m_restitution(btScalar(0.)),
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.
190  }
191 
192 protected:
193 
195  void setupRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
196 
197 public:
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  {
227  return m_gravity_acceleration;
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 
264  const btVector3& getLinearFactor() const
265  {
266  return m_linearFactor;
267  }
268  void setLinearFactor(const btVector3& linearFactor)
269  {
270  m_linearFactor = linearFactor;
272  }
273  btScalar getInvMass() const { return m_inverseMass; }
275  return m_invInertiaTensorWorld;
276  }
277 
278  void integrateVelocities(btScalar step);
279 
280  void setCenterOfMassTransform(const btTransform& xform);
281 
282  void applyCentralForce(const btVector3& force)
283  {
284  m_totalForce += force*m_linearFactor;
285  }
286 
287  const btVector3& getTotalForce() const
288  {
289  return m_totalForce;
290  };
291 
292  const btVector3& getTotalTorque() const
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  {
309  m_linearSleepingThreshold = linear;
310  m_angularSleepingThreshold = angular;
311  }
312 
313  void applyTorque(const btVector3& torque)
314  {
315  m_totalTorque += torque*m_angularFactor;
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 
346  void clearForces()
347  {
348  m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
349  m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
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  }
365  const btVector3& getAngularVelocity() const {
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  {
393  m_worldTransform.getOrigin() += v;
394  }
395 
396 
397  void getAabb(btVector3& aabbMin,btVector3& aabbMax) const;
398 
399 
400 
401 
402 
404  {
405  btVector3 r0 = pos - getCenterOfMassPosition();
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  {
476  return m_optionalMotionState;
477  }
479  {
480  return m_optionalMotionState;
481  }
482  void setMotionState(btMotionState* motionState)
483  {
484  m_optionalMotionState = motionState;
486  motionState->getWorldTransform(m_worldTransform);
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;
549  btVector3 getLocalInertia() 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 
btMatrix3x3DoubleData
for serialization
Definition: btMatrix3x3.h:1308
btRigidBodyDoubleData::m_invInertiaTensorWorld
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:593
btRigidBody::getAngularDamping
btScalar getAngularDamping() const
Definition: btRigidBody.h:237
btTypedConstraint
TypedConstraint is the baseclass for Bullet constraints and vehicles.
Definition: btTypedConstraint.h:78
btRigidBody::applyGravity
void applyGravity()
Definition: btRigidBody.cpp:218
btRigidBodyFloatData::m_additionalAngularDampingFactor
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:583
btCollisionObject
btCollisionObject can be used to manage collision detection objects.
Definition: btCollisionObject.h:49
btRigidBody::btRigidBodyConstructionInfo::m_linearDamping
btScalar m_linearDamping
Definition: btRigidBody.h:130
btRigidBody::m_invInertiaTensorWorld
btMatrix3x3 m_invInertiaTensorWorld
Definition: btRigidBody.h:65
btBroadphaseProxy
The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
Definition: btBroadphaseProxy.h:85
btRigidBody
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:62
btRigidBody::m_turnVelocity
btVector3 m_turnVelocity
Definition: btRigidBody.h:108
btRigidBody::getTotalTorque
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:292
btRigidBody::setAngularFactor
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:493
btRigidBodyFloatData::m_invInertiaLocal
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:574
btRigidBody::btRigidBodyConstructionInfo::m_angularSleepingThreshold
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:144
btRigidBody::btRigidBodyConstructionInfo::m_angularDamping
btScalar m_angularDamping
Definition: btRigidBody.h:131
BT_ENABLE_GYROPSCOPIC_FORCE
@ BT_ENABLE_GYROPSCOPIC_FORCE
Definition: btRigidBody.h:50
BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT
@ BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT
BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
Definition: btRigidBody.h:47
btRigidBody::predictIntegratedTransform
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
Definition: btRigidBody.cpp:106
DISABLE_DEACTIVATION
#define DISABLE_DEACTIVATION
Definition: btCollisionObject.h:25
btRigidBody::m_angularDamping
btScalar m_angularDamping
Definition: btRigidBody.h:78
btRigidBodyDoubleData::m_gravity_acceleration
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:599
btRigidBody::btRigidBodyConstructionInfo::m_additionalAngularDampingThresholdSqr
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:151
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:483
btQuaternion
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:55
btRigidBodyFloatData::m_linearDamping
float m_linearDamping
Definition: btRigidBody.h:578
gDeactivationTime
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
btRigidBody::serializeSingleObject
virtual void serializeSingleObject(class btSerializer *serializer) const
Definition: btRigidBody.cpp:520
btVector3::setValue
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:652
btRigidBody::btRigidBodyConstructionInfo::m_additionalLinearDampingThresholdSqr
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:150
btRigidBody::getAngularVelocity
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:365
btScalar
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:292
btRigidBody::m_totalTorque
btVector3 m_totalTorque
Definition: btRigidBody.h:75
btRigidBodyFloatData::m_gravity
btVector3FloatData m_gravity
Definition: btRigidBody.h:572
btRigidBody::m_additionalDamping
bool m_additionalDamping
Definition: btRigidBody.h:80
btRigidBody::btRigidBodyConstructionInfo::m_mass
btScalar m_mass
Definition: btRigidBody.h:121
btRigidBody::m_contactSolverType
int m_contactSolverType
Definition: btRigidBody.h:490
btRigidBody::m_rigidbodyFlags
int m_rigidbodyFlags
Definition: btRigidBody.h:96
btCollisionObjectDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:602
btRigidBody::setGravity
void setGravity(const btVector3 &acceleration)
Definition: btRigidBody.cpp:137
btRigidBody::isInWorld
bool isInWorld() const
Definition: btRigidBody.h:510
btRigidBody::getBroadphaseProxy
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:464
btRigidBody::setSleepingThresholds
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:307
btRigidBody::getNumConstraintRefs
int getNumConstraintRefs() const
Definition: btRigidBody.h:523
btRigidBody::computeGyroscopicForceExplicit
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
Definition: btRigidBody.cpp:294
btCollisionObjectFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btCollisionObject.h:637
btRigidBody::getLinearDamping
btScalar getLinearDamping() const
Definition: btRigidBody.h:232
btVector3::cross
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:389
btRigidBodyFloatData::m_additionalLinearDampingThresholdSqr
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:581
btRigidBody::updateInertiaTensor
void updateInertiaTensor()
Definition: btRigidBody.cpp:256
btRigidBody::getAabb
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
Definition: btRigidBody.cpp:129
btRigidBodyFloatData::m_linearFactor
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:571
btMotionState::getWorldTransform
virtual void getWorldTransform(btTransform &worldTrans) const =0
btRigidBodyDoubleData::m_angularFactor
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:596
btRigidBodyFloatData::m_totalForce
btVector3FloatData m_totalForce
Definition: btRigidBody.h:575
btRigidBodyDoubleData::m_invInertiaLocal
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:600
btRigidBody::m_inverseMass
btScalar m_inverseMass
Definition: btRigidBody.h:68
btRigidBodyDoubleData::m_collisionObjectData
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:592
btRigidBody::translate
void translate(const btVector3 &v)
Definition: btRigidBody.h:391
btRigidBodyDoubleData::m_additionalAngularDampingThresholdSqr
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:608
btRigidBody::integrateVelocities
void integrateVelocities(btScalar step)
Definition: btRigidBody.cpp:387
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD
Definition: btRigidBody.h:48
btVector3::dot
btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:235
btRigidBody::getAngularSleepingThreshold
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:247
btCollisionObject::getActivationState
int getActivationState() const
Definition: btCollisionObject.h:282
btCollisionObject::m_worldTransform
btTransform m_worldTransform
Definition: btCollisionObject.h:54
btRigidBody::computeGyroscopicImpulseImplicit_World
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
Definition: btRigidBody.cpp:350
btRigidBodyFloatData::m_angularDamping
float m_angularDamping
Definition: btRigidBody.h:579
btRigidBodyDoubleData::m_linearSleepingThreshold
double m_linearSleepingThreshold
Definition: btRigidBody.h:610
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
Definition: btRigidBody.h:49
btRigidBody::applyTorqueImpulse
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:329
btRigidBody::m_gravity
btVector3 m_gravity
Definition: btRigidBody.h:71
btRigidBodyFloatData::m_angularFactor
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:570
btRigidBody::btRigidBodyConstructionInfo::m_spinningFriction
btScalar m_spinningFriction
Definition: btRigidBody.h:138
btRigidBodyDoubleData::m_padding
char m_padding[4]
Definition: btRigidBody.h:613
btRigidBody::getCenterOfMassTransform
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:359
btRigidBody::btRigidBodyConstructionInfo::m_startWorldTransform
btTransform m_startWorldTransform
Definition: btRigidBody.h:126
btCollisionObject::m_deactivationTime
btScalar m_deactivationTime
Definition: btCollisionObject.h:85
btRigidBody::wantsSleeping
bool wantsSleeping()
Definition: btRigidBody.h:438
btVector3FloatData
Definition: btVector3.h:1312
btRigidBody::setDamping
void setDamping(btScalar lin_damping, btScalar ang_damping)
Definition: btRigidBody.cpp:151
btRigidBody::m_angularSleepingThreshold
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:88
btTransform::setIdentity
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:172
btRigidBody::setLinearFactor
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:268
btRigidBody::getOrientation
btQuaternion getOrientation() const
Definition: btRigidBody.cpp:405
btRigidBodyDoubleData::m_angularSleepingThreshold
double m_angularSleepingThreshold
Definition: btRigidBody.h:611
gDisableDeactivation
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
btRigidBody::m_additionalLinearDampingThresholdSqr
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:82
btRigidBody::m_optionalMotionState
btMotionState * m_optionalMotionState
Definition: btRigidBody.h:91
btRigidBody::calculateSerializeBufferSize
virtual int calculateSerializeBufferSize() const
Definition: btRigidBody.cpp:476
btRigidBody::getInvInertiaDiagLocal
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:297
btCollisionObject::CO_RIGID_BODY
@ CO_RIGID_BODY
Definition: btCollisionObject.h:149
btRigidBody::setLinearVelocity
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:370
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
Definition: btCollisionShape.h:27
ISLAND_SLEEPING
#define ISLAND_SLEEPING
Definition: btCollisionObject.h:23
btAssert
#define btAssert(x)
Definition: btScalar.h:131
btCollisionObject::m_collisionShape
btCollisionShape * m_collisionShape
Definition: btCollisionObject.h:69
btRigidBody::setupRigidBody
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:41
btRigidBody::m_angularFactor
btVector3 m_angularFactor
Definition: btRigidBody.h:105
btRigidBodyFloatData::m_inverseMass
float m_inverseMass
Definition: btRigidBody.h:577
btRigidBody::clearForces
void clearForces()
Definition: btRigidBody.h:346
btRigidBody::getCollisionShape
const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:254
btRigidBody::getLinearFactor
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:264
btRigidBody::btRigidBodyConstructionInfo::m_restitution
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:141
btVector3DoubleData
Definition: btVector3.h:1317
btRigidBody::setFlags
void setFlags(int flags)
Definition: btRigidBody.h:528
btRigidBody::applyCentralForce
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:282
btRigidBody::proceedToTransform
void proceedToTransform(const btTransform &newTrans)
Definition: btRigidBody.cpp:227
btRigidBody::updateDeactivation
void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:421
btRigidBodyDoubleData::m_additionalDamping
int m_additionalDamping
Definition: btRigidBody.h:612
btRigidBody::btRigidBodyConstructionInfo::m_friction
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:134
btRigidBodyDoubleData::m_additionalLinearDampingThresholdSqr
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:607
btRigidBody::btRigidBody
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:30
btRigidBody::getCollisionShape
btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:258
btRigidBody::m_linearFactor
btVector3 m_linearFactor
Definition: btRigidBody.h:69
btRigidBody::getAngularFactor
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:504
btRigidBody::applyTorque
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:313
btRigidBody::m_pushVelocity
btVector3 m_pushVelocity
Definition: btRigidBody.h:107
btRigidBodyDoubleData::m_totalTorque
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:602
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:48
btRigidBody::m_angularVelocity
btVector3 m_angularVelocity
Definition: btRigidBody.h:67
btTransform.h
btRigidBody::getInvMass
btScalar getInvMass() const
Definition: btRigidBody.h:273
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
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:460
btRigidBody::btRigidBodyConstructionInfo::m_additionalDamping
bool m_additionalDamping
Definition: btRigidBody.h:148
btRigidBody::btRigidBodyConstructionInfo::m_localInertia
btVector3 m_localInertia
Definition: btRigidBody.h:129
btRigidBody::m_invInertiaLocal
btVector3 m_invInertiaLocal
Definition: btRigidBody.h:73
btRigidBodyDoubleData::m_totalForce
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:601
btRigidBodyFloatData::m_collisionObjectData
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:566
btRigidBodyFloatData::m_angularSleepingThreshold
float m_angularSleepingThreshold
Definition: btRigidBody.h:585
btRigidBody::saveKinematicState
void saveKinematicState(btScalar step)
Definition: btRigidBody.cpp:111
btRigidBodyFloatData::m_totalTorque
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:576
btRigidBodyFlags
btRigidBodyFlags
Definition: btRigidBody.h:41
btVector3
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
BT_DISABLE_WORLD_GRAVITY
@ BT_DISABLE_WORLD_GRAVITY
Definition: btRigidBody.h:43
btRigidBody::m_deltaLinearVelocity
btVector3 m_deltaLinearVelocity
Definition: btRigidBody.h:103
btRigidBody::m_linearSleepingThreshold
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:87
btTransform::getOrigin
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:117
btRigidBody::getLinearVelocity
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:362
btRigidBody::getVelocityInLocalPoint
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:382
btRigidBody::getLinearSleepingThreshold
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:242
btRigidBody::getFlags
int getFlags() const
Definition: btRigidBody.h:533
btRigidBodyDoubleData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:590
btRigidBody::applyDamping
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
Definition: btRigidBody.cpp:161
btRigidBodyFloatData
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:564
btRigidBody::addConstraintRef
void addConstraintRef(btTypedConstraint *c)
Definition: btRigidBody.cpp:433
ATTRIBUTE_ALIGNED16
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:82
btRigidBody::m_additionalAngularDampingThresholdSqr
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:83
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:123
btAlignedObjectArray< btTypedConstraint * >
btRigidBody::setAngularFactor
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:499
btRigidBody::applyForce
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:318
btRigidBody::setAngularVelocity
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:376
SIMD_FORCE_INLINE
#define SIMD_FORCE_INLINE
Definition: btScalar.h:81
btRigidBody::m_debugBodyId
int m_debugBodyId
Definition: btRigidBody.h:98
btBroadphaseProxy.h
btRigidBody::setNewBroadphaseProxy
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:468
btSerializer
Definition: btSerializer.h:68
btRigidBody::setMassProps
void setMassProps(btScalar mass, const btVector3 &inertia)
Definition: btRigidBody.cpp:233
btRigidBodyDoubleData::m_angularDamping
double m_angularDamping
Definition: btRigidBody.h:605
btRigidBody::btRigidBodyConstructionInfo::m_additionalDampingFactor
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:149
btRigidBody::btRigidBodyConstructionInfo::m_collisionShape
btCollisionShape * m_collisionShape
Definition: btRigidBody.h:128
btRigidBody::applyCentralImpulse
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:324
btRigidBody::m_constraintRefs
btAlignedObjectArray< btTypedConstraint * > m_constraintRefs
Definition: btRigidBody.h:94
btRigidBodyDoubleData::m_linearVelocity
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:594
btRigidBody::m_additionalDampingFactor
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:81
btRigidBody::m_frictionSolverType
int m_frictionSolverType
Definition: btRigidBody.h:491
btRigidBody::m_linearDamping
btScalar m_linearDamping
Definition: btRigidBody.h:77
btRigidBodyFloatData::m_linearSleepingThreshold
float m_linearSleepingThreshold
Definition: btRigidBody.h:584
btRigidBody::m_linearVelocity
btVector3 m_linearVelocity
Definition: btRigidBody.h:66
btCollisionObject::getInternalType
int getInternalType() const
reserved for Bullet internal usage
Definition: btCollisionObject.h:367
btRigidBodyFloatData::m_angularVelocity
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:569
btRigidBodyDoubleData::m_additionalAngularDampingFactor
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:609
btCollisionObject::m_broadphaseHandle
btBroadphaseProxy * m_broadphaseHandle
Definition: btCollisionObject.h:68
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:125
btRigidBodyFloatData::m_linearVelocity
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:568
btRigidBody::m_gravity_acceleration
btVector3 m_gravity_acceleration
Definition: btRigidBody.h:72
btRigidBody::getInvInertiaTensorWorld
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:274
btRigidBody::setInvInertiaDiagLocal
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:302
btRigidBody::setMotionState
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:482
WANTS_DEACTIVATION
#define WANTS_DEACTIVATION
Definition: btCollisionObject.h:24
btRigidBody::setCenterOfMassTransform
void setCenterOfMassTransform(const btTransform &xform)
Definition: btRigidBody.cpp:413
btCollisionObject.h
btRigidBody::getConstraintRef
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:518
btRigidBodyFloatData::m_additionalAngularDampingThresholdSqr
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:582
btRigidBody::getCenterOfMassPosition
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:354
btRigidBodyFloatData::m_additionalDampingFactor
float m_additionalDampingFactor
Definition: btRigidBody.h:580
btRigidBody::btRigidBodyConstructionInfo::m_additionalAngularDampingFactor
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:152
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:137
btAlignedObjectArray.h
btRigidBody::m_deltaAngularVelocity
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:104
btRigidBody::upcast
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:209
btRigidBody::btRigidBodyConstructionInfo
The btRigidBodyConstructionInfo structure provides information to create a rigid body.
Definition: btRigidBody.h:119
btRigidBody::getMotionState
const btMotionState * getMotionState() const
Definition: btRigidBody.h:478
btRigidBodyFloatData::m_invInertiaTensorWorld
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:567
btRigidBodyDoubleData::m_inverseMass
double m_inverseMass
Definition: btRigidBody.h:603
btRigidBody::getTotalForce
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:287
btRigidBody::applyImpulse
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:334
btRigidBody::m_additionalAngularDampingFactor
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:84
btRigidBodyFloatData::m_gravity_acceleration
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:573
btRigidBodyDoubleData::m_gravity
btVector3DoubleData m_gravity
Definition: btRigidBody.h:598
btMatrix3x3FloatData
for serialization
Definition: btMatrix3x3.h:1302
btRigidBodyFloatData::m_additionalDamping
int m_additionalDamping
Definition: btRigidBody.h:586
btRigidBodyDoubleData::m_additionalDampingFactor
double m_additionalDampingFactor
Definition: btRigidBody.h:606
btRigidBodyDoubleData::m_linearDamping
double m_linearDamping
Definition: btRigidBody.h:604
btRigidBody::computeImpulseDenominator
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:403
btRigidBody::~btRigidBody
virtual ~btRigidBody()
Definition: btRigidBody.h:185
btRigidBody::btRigidBodyConstructionInfo::btRigidBodyConstructionInfo
btRigidBodyConstructionInfo(btScalar mass, btMotionState *motionState, btCollisionShape *collisionShape, const btVector3 &localInertia=btVector3(0, 0, 0))
Definition: btRigidBody.h:154
btRigidBody::removeConstraintRef
void removeConstraintRef(btTypedConstraint *c)
Definition: btRigidBody.cpp:456
btRigidBody::getGravity
const btVector3 & getGravity() const
Definition: btRigidBody.h:225
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:203
btRigidBody::btRigidBodyConstructionInfo::m_linearSleepingThreshold
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:143
btRigidBody::computeAngularImpulseDenominator
btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:415
btRigidBody::getMotionState
btMotionState * getMotionState()
Definition: btRigidBody.h:474
btCollisionObject::setActivationState
void setActivationState(int newState) const
Definition: btCollisionObject.cpp:60
btAlignedObjectArray::size
int size() const
return the number of elements in the array
Definition: btAlignedObjectArray.h:155
btRigidBody::m_totalForce
btVector3 m_totalForce
Definition: btRigidBody.h:74
btRigidBodyDoubleData::m_linearFactor
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:597
btRigidBodyDoubleData::m_angularVelocity
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:595
btRigidBody::computeGyroscopicImpulseImplicit_Body
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
Definition: btRigidBody.cpp:309
btRigidBody::m_invMass
btVector3 m_invMass
Definition: btRigidBody.h:106
btRigidBody::getLocalInertia
btVector3 getLocalInertia() const
Definition: btRigidBody.cpp:263