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),
159  m_linearDamping(btScalar(0.)),
160  m_angularDamping(btScalar(0.)),
161  m_friction(btScalar(0.5)),
162  m_rollingFriction(btScalar(0)),
163  m_spinningFriction(btScalar(0)),
164  m_restitution(btScalar(0.)),
165  m_linearSleepingThreshold(btScalar(0.8)),
166  m_angularSleepingThreshold(btScalar(1.f)),
167  m_additionalDamping(false),
168  m_additionalDampingFactor(btScalar(0.005)),
169  m_additionalLinearDampingThresholdSqr(btScalar(0.01)),
170  m_additionalAngularDampingThresholdSqr(btScalar(0.01)),
171  m_additionalAngularDampingFactor(btScalar(0.01))
172  {
173  m_startWorldTransform.setIdentity();
174  }
175  };
176 
178  btRigidBody( const btRigidBodyConstructionInfo& constructionInfo);
179 
182  btRigidBody( btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia=btVector3(0,0,0));
183 
184 
185  virtual ~btRigidBody()
186  {
187  //No constraints should point to this rigidbody
188  //Remove constraints from the dynamics world before you delete the related rigidbodies.
189  btAssert(m_constraintRefs.size()==0);
190  }
191 
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;
271  m_invMass = m_linearFactor*m_inverseMass;
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  {
326  m_linearVelocity += impulse *m_linearFactor * m_inverseMass;
327  }
328 
329  void applyTorqueImpulse(const btVector3& torque)
330  {
331  m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
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 
426  if ((getLinearVelocity().length2() < m_linearSleepingThreshold*m_linearSleepingThreshold) &&
427  (getAngularVelocity().length2() < m_angularSleepingThreshold*m_angularSleepingThreshold))
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;
485  if (m_optionalMotionState)
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 
btScalar getInvMass() const
Definition: btRigidBody.h:273
const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:254
static const btRigidBody * upcast(const btCollisionObject *colObj)
to keep collision detection and dynamics separate we don&#39;t store a rigidbody pointer but a rigidbody ...
Definition: btRigidBody.h:203
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
btVector3FloatData m_gravity
Definition: btRigidBody.h:572
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
for serialization
Definition: btMatrix3x3.h:1374
bool isInWorld() const
Definition: btRigidBody.h:510
void translate(const btVector3 &v)
Definition: btRigidBody.h:391
const btMotionState * getMotionState() const
Definition: btRigidBody.h:478
void applyGravity()
btVector3 m_totalTorque
Definition: btRigidBody.h:75
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:287
int m_contactSolverType
Definition: btRigidBody.h:490
btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:415
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
Definition: btVector3.h:652
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:329
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:570
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:504
void updateInertiaTensor()
btVector3 m_totalForce
Definition: btRigidBody.h:74
btScalar m_angularDamping
Definition: btRigidBody.h:78
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:569
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
int getInternalType() const
reserved for Bullet internal usage
bool wantsSleeping()
Definition: btRigidBody.h:438
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:601
btVector3 m_turnVelocity
Definition: btRigidBody.h:108
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:464
void setIdentity()
Set this transformation to the identity.
Definition: btTransform.h:172
#define btAssert(x)
Definition: btScalar.h:131
btVector3 m_gravity
Definition: btRigidBody.h:71
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:582
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:292
btVector3DoubleData m_gravity
Definition: btRigidBody.h:598
#define SIMD_FORCE_INLINE
Definition: btScalar.h:81
btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:403
double m_additionalDampingFactor
Definition: btRigidBody.h:606
btScalar getLinearDamping() const
Definition: btRigidBody.h:232
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:594
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:30
void setDamping(btScalar lin_damping, btScalar ang_damping)
btScalar m_angularSleepingThreshold
Definition: btRigidBody.h:88
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:268
bool m_additionalDamping
Definition: btRigidBody.h:80
float m_linearSleepingThreshold
Definition: btRigidBody.h:584
btScalar m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:82
int m_rigidbodyFlags
Definition: btRigidBody.h:96
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:307
float m_additionalDampingFactor
Definition: btRigidBody.h:580
btTransform m_worldTransform
#define ISLAND_SLEEPING
btScalar m_rollingFriction
the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling f...
Definition: btRigidBody.h:137
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:581
btScalar dot(const btVector3 &v) const
Return the dot product.
Definition: btVector3.h:235
btVector3 m_pushVelocity
Definition: btRigidBody.h:107
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:566
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:597
btVector3FloatData m_totalForce
Definition: btRigidBody.h:575
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:382
btScalar m_inverseMass
Definition: btRigidBody.h:68
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:282
BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
Definition: btRigidBody.h:47
void integrateVelocities(btScalar step)
void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:421
virtual int calculateSerializeBufferSize() const
btVector3 m_invInertiaLocal
Definition: btRigidBody.h:73
int getNumConstraintRefs() const
Definition: btRigidBody.h:523
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
void setActivationState(int newState) const
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:609
btVector3 m_deltaLinearVelocity
Definition: btRigidBody.h:103
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:313
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
int size() const
return the number of elements in the array
btVector3 & getOrigin()
Return the origin vector translation.
Definition: btTransform.h:117
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:41
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:359
btScalar getAngularDamping() const
Definition: btRigidBody.h:237
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:593
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:590
void setFlags(int flags)
Definition: btRigidBody.h:528
void addConstraintRef(btTypedConstraint *c)
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:247
btQuaternion getOrientation() const
btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:258
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:583
btRigidBodyFlags
Definition: btRigidBody.h:41
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:365
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
Definition: btVector3.h:389
btMotionState * m_optionalMotionState
Definition: btRigidBody.h:91
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:141
btCollisionObject can be used to manage collision detection objects.
btScalar m_linearSleepingThreshold
Definition: btRigidBody.h:87
virtual void serializeSingleObject(class btSerializer *serializer) const
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:370
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:354
The btRigidBody is the main class for rigid body objects.
Definition: btRigidBody.h:62
btVector3 m_angularFactor
Definition: btRigidBody.h:105
void clearForces()
Definition: btRigidBody.h:346
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:600
The btRigidBodyConstructionInfo structure provides information to create a rigid body.
Definition: btRigidBody.h:119
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 ...
Definition: btRigidBody.h:564
btVector3 m_angularVelocity
Definition: btRigidBody.h:67
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:596
void proceedToTransform(const btTransform &newTrans)
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:242
btScalar m_additionalDampingFactor
Definition: btRigidBody.h:81
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:77
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:154
btVector3 m_linearFactor
Definition: btRigidBody.h:69
btVector3 m_linearVelocity
Definition: btRigidBody.h:66
btVector3 can be used to represent 3D points and vectors.
Definition: btVector3.h:83
#define ATTRIBUTE_ALIGNED16(a)
Definition: btScalar.h:82
btVector3 getLocalInertia() const
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:595
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:499
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:318
int m_debugBodyId
Definition: btRigidBody.h:98
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:576
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:567
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:34
void setCenterOfMassTransform(const btTransform &xform)
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:518
void setMassProps(btScalar mass, const btVector3 &inertia)
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:608
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping ...
const btVector3 & getGravity() const
Definition: btRigidBody.h:225
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:592
#define WANTS_DEACTIVATION
double m_linearSleepingThreshold
Definition: btRigidBody.h:610
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)
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:376
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:302
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:599
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:482
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:568
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
#define DISABLE_DEACTIVATION
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:274
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:324
const btBroadphaseProxy * getBroadphaseProxy() const
Definition: btRigidBody.h:460
btScalar m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:83
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:48
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:297
btMotionState * getMotionState()
Definition: btRigidBody.h:474
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:362
btVector3 m_gravity_acceleration
Definition: btRigidBody.h:72
btScalar m_additionalAngularDampingFactor
Definition: btRigidBody.h:84
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:334
for serialization
Definition: btMatrix3x3.h:1380
btBroadphaseProxy * m_broadphaseHandle
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:55
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:468
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:574
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:602
float m_angularSleepingThreshold
Definition: btRigidBody.h:585
virtual ~btRigidBody()
Definition: btRigidBody.h:185
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
btAlignedObjectArray< btTypedConstraint * > m_constraintRefs
Definition: btRigidBody.h:94
double m_angularSleepingThreshold
Definition: btRigidBody.h:611
int m_frictionSolverType
Definition: btRigidBody.h:491
void removeConstraintRef(btTypedConstraint *c)
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:264
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:104
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:607
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:493
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:209
int getActivationState() const
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:573
btMotionState * m_motionState
When a motionState is provided, the rigid body will initialize its world transform from the motion st...
Definition: btRigidBody.h:125
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:134
btVector3 m_invMass
Definition: btRigidBody.h:106
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:292
int getFlags() const
Definition: btRigidBody.h:533
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:571
btMatrix3x3 m_invInertiaTensorWorld
Definition: btRigidBody.h:65
void setGravity(const btVector3 &acceleration)