Blender  V3.3
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 {
61  btMatrix3x3 m_invInertiaTensorWorld;
62  btVector3 m_linearVelocity;
63  btVector3 m_angularVelocity;
64  btScalar m_inverseMass;
65  btVector3 m_linearFactor;
66 
67  btVector3 m_gravity;
68  btVector3 m_gravity_acceleration;
69  btVector3 m_invInertiaLocal;
70  btVector3 m_totalForce;
71  btVector3 m_totalTorque;
72 
73  btScalar m_linearDamping;
74  btScalar m_angularDamping;
75 
76  bool m_additionalDamping;
77  btScalar m_additionalDampingFactor;
78  btScalar m_additionalLinearDampingThresholdSqr;
79  btScalar m_additionalAngularDampingThresholdSqr;
80  btScalar m_additionalAngularDampingFactor;
81 
82  btScalar m_linearSleepingThreshold;
83  btScalar m_angularSleepingThreshold;
84 
85  //m_optionalMotionState allows to automatic synchronize the world transform for active objects
86  btMotionState* m_optionalMotionState;
87 
88  //keep track of typed constraints referencing this rigid body, to disable collision between linked bodies
90 
91  int m_rigidbodyFlags;
92 
93  int m_debugBodyId;
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  {
162  m_startWorldTransform.setIdentity();
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.
177  btAssert(m_constraintRefs.size() == 0);
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  {
191  if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY)
192  return (const btRigidBody*)colObj;
193  return 0;
194  }
196  {
197  if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY)
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  {
232  return m_linearSleepingThreshold;
233  }
234 
236  {
237  return m_angularSleepingThreshold;
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;
261  m_invMass = m_linearFactor * m_inverseMass;
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  {
267  return m_invInertiaTensorWorld;
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  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
309  clampVelocity(m_totalTorque);
310  #endif
311  }
312 
313  void applyForce(const btVector3& force, const btVector3& rel_pos)
314  {
315  applyCentralForce(force);
316  applyTorque(rel_pos.cross(force * m_linearFactor));
317  }
318 
319  void applyCentralImpulse(const btVector3& impulse)
320  {
321  m_linearVelocity += impulse * m_linearFactor * m_inverseMass;
322  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
323  clampVelocity(m_linearVelocity);
324  #endif
325  }
326 
327  void applyTorqueImpulse(const btVector3& torque)
328  {
329  m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
330  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
331  clampVelocity(m_angularVelocity);
332  #endif
333  }
334 
335  void applyImpulse(const btVector3& impulse, const btVector3& rel_pos)
336  {
337  if (m_inverseMass != btScalar(0.))
338  {
339  applyCentralImpulse(impulse);
340  if (m_angularFactor)
341  {
342  applyTorqueImpulse(rel_pos.cross(impulse * m_linearFactor));
343  }
344  }
345  }
346 
347  void applyPushImpulse(const btVector3& impulse, const btVector3& rel_pos)
348  {
349  if (m_inverseMass != btScalar(0.))
350  {
351  applyCentralPushImpulse(impulse);
352  if (m_angularFactor)
353  {
354  applyTorqueTurnImpulse(rel_pos.cross(impulse * m_linearFactor));
355  }
356  }
357  }
358 
360  {
361  return m_pushVelocity;
362  }
363 
365  {
366  return m_turnVelocity;
367  }
368 
370  {
371  m_pushVelocity = v;
372  }
373 
374  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
375  void clampVelocity(btVector3& v) const {
376  v.setX(
377  fmax(-BT_CLAMP_VELOCITY_TO,
378  fmin(BT_CLAMP_VELOCITY_TO, v.getX()))
379  );
380  v.setY(
381  fmax(-BT_CLAMP_VELOCITY_TO,
382  fmin(BT_CLAMP_VELOCITY_TO, v.getY()))
383  );
384  v.setZ(
385  fmax(-BT_CLAMP_VELOCITY_TO,
386  fmin(BT_CLAMP_VELOCITY_TO, v.getZ()))
387  );
388  }
389  #endif
390 
392  {
393  m_turnVelocity = v;
394  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
395  clampVelocity(m_turnVelocity);
396  #endif
397  }
398 
399  void applyCentralPushImpulse(const btVector3& impulse)
400  {
401  m_pushVelocity += impulse * m_linearFactor * m_inverseMass;
402  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
403  clampVelocity(m_pushVelocity);
404  #endif
405  }
406 
407  void applyTorqueTurnImpulse(const btVector3& torque)
408  {
409  m_turnVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
410  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
411  clampVelocity(m_turnVelocity);
412  #endif
413  }
414 
415  void clearForces()
416  {
417  m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
418  m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
419  }
420 
421  void updateInertiaTensor();
422 
424  {
425  return m_worldTransform.getOrigin();
426  }
428 
430  {
431  return m_worldTransform;
432  }
434  {
435  return m_linearVelocity;
436  }
438  {
439  return m_angularVelocity;
440  }
441 
442  inline void setLinearVelocity(const btVector3& lin_vel)
443  {
445  m_linearVelocity = lin_vel;
446  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
447  clampVelocity(m_linearVelocity);
448  #endif
449  }
450 
451  inline void setAngularVelocity(const btVector3& ang_vel)
452  {
454  m_angularVelocity = ang_vel;
455  #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
456  clampVelocity(m_angularVelocity);
457  #endif
458  }
459 
461  {
462  //we also calculate lin/ang velocity for kinematic objects
463  return m_linearVelocity + m_angularVelocity.cross(rel_pos);
464 
465  //for kinematic objects, we could also use use:
466  // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
467  }
468 
470  {
471  //we also calculate lin/ang velocity for kinematic objects
472  return m_pushVelocity + m_turnVelocity.cross(rel_pos);
473  }
474 
475  void translate(const btVector3& v)
476  {
477  m_worldTransform.getOrigin() += v;
478  }
479 
480  void getAabb(btVector3& aabbMin, btVector3& aabbMax) const;
481 
483  {
485 
486  btVector3 c0 = (r0).cross(normal);
487 
488  btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0);
489 
490  return m_inverseMass + normal.dot(vec);
491  }
492 
494  {
495  btVector3 vec = axis * getInvInertiaTensorWorld();
496  return axis.dot(vec);
497  }
498 
500  {
502  return;
503 
504  if ((getLinearVelocity().length2() < m_linearSleepingThreshold * m_linearSleepingThreshold) &&
505  (getAngularVelocity().length2() < m_angularSleepingThreshold * m_angularSleepingThreshold))
506  {
507  m_deactivationTime += timeStep;
508  }
509  else
510  {
513  }
514  }
515 
517  {
519  return false;
520 
521  //disable deactivation
523  return false;
524 
526  return true;
527 
529  {
530  return true;
531  }
532  return false;
533  }
534 
536  {
537  return m_broadphaseHandle;
538  }
540  {
541  return m_broadphaseHandle;
542  }
544  {
545  m_broadphaseHandle = broadphaseProxy;
546  }
547 
548  //btMotionState allows to automatic synchronize the world transform for active objects
550  {
551  return m_optionalMotionState;
552  }
554  {
555  return m_optionalMotionState;
556  }
557  void setMotionState(btMotionState* motionState)
558  {
559  m_optionalMotionState = motionState;
560  if (m_optionalMotionState)
561  motionState->getWorldTransform(m_worldTransform);
562  }
563 
564  //for experimental overriding of friction/contact solver func
567 
568  void setAngularFactor(const btVector3& angFac)
569  {
571  m_angularFactor = angFac;
572  }
573 
575  {
577  m_angularFactor.setValue(angFac, angFac, angFac);
578  }
580  {
581  return m_angularFactor;
582  }
583 
584  //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
585  bool isInWorld() const
586  {
587  return (getBroadphaseProxy() != 0);
588  }
589 
592 
594  {
595  return m_constraintRefs[index];
596  }
597 
599  {
600  return m_constraintRefs.size();
601  }
602 
603  void setFlags(int flags)
604  {
605  m_rigidbodyFlags = flags;
606  }
607 
608  int getFlags() const
609  {
610  return m_rigidbodyFlags;
611  }
612 
615 
618 
620  btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
621  btVector3 getLocalInertia() const;
622 
624 
625  virtual int calculateSerializeBufferSize() const;
626 
628  virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
629 
630  virtual void serializeSingleObject(class btSerializer* serializer) const;
631 };
632 
633 //@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
636 {
658 };
659 
662 {
684  char m_padding[4];
685 };
686 
687 #endif //BT_RIGIDBODY_H
ATTR_WARN_UNUSED_RESULT const BMVert * v
btBroadphaseProxy
btCollisionObject
#define DISABLE_DEACTIVATION
btScalar m_deactivationTime
void setActivationState(int newState) const
@ CO_RIGID_BODY
SIMD_FORCE_INLINE int getActivationState() const
#define WANTS_DEACTIVATION
#define ISLAND_SLEEPING
int m_updateRevision
internal update revision number. It will be increased when the object changes. This allows some subsy...
btCollisionShape * m_collisionShape
btBroadphaseProxy * m_broadphaseHandle
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btScalar m_angularDamping
btScalar m_linearDamping
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
Definition: btMatrix3x3.h:50
bool gDisableDeactivation
Definition: btRigidBody.cpp:26
btScalar gDeactivationTime
Definition: btRigidBody.cpp:25
btRigidBodyFlags
Definition: btRigidBody.h:40
@ BT_ENABLE_GYROPSCOPIC_FORCE
Definition: btRigidBody.h:48
@ BT_DISABLE_WORLD_GRAVITY
Definition: btRigidBody.h:41
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
Definition: btRigidBody.h:47
@ BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT
Definition: btRigidBody.h:45
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD
Definition: btRigidBody.h:46
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
Definition: btScalar.h:314
#define SIMD_FORCE_INLINE
Definition: btScalar.h:280
#define btAssert(x)
Definition: btScalar.h:295
btTransform m_worldTransform
Definition: btSolverBody.h:107
btVector3 m_deltaLinearVelocity
Definition: btSolverBody.h:108
btVector3 m_linearFactor
Definition: btSolverBody.h:111
btVector3 m_angularVelocity
Definition: btSolverBody.h:116
btVector3 m_linearVelocity
Definition: btSolverBody.h:115
btTransform
The btTransform class supports rigid transforms with only translation and rotation and no scaling/she...
Definition: btTransform.h:30
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
Definition: btVector3.h:251
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
Definition: btVector3.h:82
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
virtual void getWorldTransform(btTransform &worldTrans) const =0
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
Definition: btQuaternion.h:50
void applyTorqueImpulse(const btVector3 &torque)
Definition: btRigidBody.h:327
void setLinearFactor(const btVector3 &linearFactor)
Definition: btRigidBody.h:258
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
const btVector3 & getGravity() const
Definition: btRigidBody.h:213
void applyGravity()
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
Definition: btRigidBody.h:242
const btVector3 & getAngularVelocity() const
Definition: btRigidBody.h:437
void integrateVelocities(btScalar step)
SIMD_FORCE_INLINE btScalar computeAngularImpulseDenominator(const btVector3 &axis) const
Definition: btRigidBody.h:493
btVector3 getVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:460
void addConstraintRef(btTypedConstraint *c)
virtual void serializeSingleObject(class btSerializer *serializer) const
void clearForces()
Definition: btRigidBody.h:415
void setNewBroadphaseProxy(btBroadphaseProxy *broadphaseProxy)
Definition: btRigidBody.h:543
void setFlags(int flags)
Definition: btRigidBody.h:603
int getFlags() const
Definition: btRigidBody.h:608
ATTRIBUTE_ALIGNED16(btVector3 m_deltaLinearVelocity)
btMotionState * getMotionState()
Definition: btRigidBody.h:549
int m_frictionSolverType
Definition: btRigidBody.h:566
btScalar getLinearSleepingThreshold() const
Definition: btRigidBody.h:230
static btRigidBody * upcast(btCollisionObject *colObj)
Definition: btRigidBody.h:195
const btVector3 & getLinearFactor() const
Definition: btRigidBody.h:254
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
int m_contactSolverType
Definition: btRigidBody.h:565
void applyCentralForce(const btVector3 &force)
Definition: btRigidBody.h:274
btScalar getInvMass() const
Definition: btRigidBody.h:263
SIMD_FORCE_INLINE btCollisionShape * getCollisionShape()
Definition: btRigidBody.h:247
btScalar getAngularDamping() const
Definition: btRigidBody.h:225
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
btBroadphaseProxy * getBroadphaseProxy()
Definition: btRigidBody.h:539
btVector3 m_turnVelocity
Definition: btRigidBody.h:101
virtual int calculateSerializeBufferSize() const
static const btRigidBody * upcast(const btCollisionObject *colObj)
Definition: btRigidBody.h:189
void setGravity(const btVector3 &acceleration)
const btMotionState * getMotionState() const
Definition: btRigidBody.h:553
btScalar getMass() const
Definition: btRigidBody.h:264
const btVector3 & getTotalTorque() const
Definition: btRigidBody.h:284
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
Definition: btRigidBody.cpp:29
btQuaternion getOrientation() const
void proceedToTransform(const btTransform &newTrans)
void saveKinematicState(btScalar step)
btVector3 getLocalInertia() const
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const
perform implicit force computation in world space
const btBroadphaseProxy * getBroadphaseProxy() const
Definition: btRigidBody.h:535
btVector3 m_angularFactor
Definition: btRigidBody.h:98
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
void applyImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:335
void applyCentralImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:319
void setTurnVelocity(const btVector3 &v)
Definition: btRigidBody.h:391
SIMD_FORCE_INLINE btScalar computeImpulseDenominator(const btVector3 &pos, const btVector3 &normal) const
Definition: btRigidBody.h:482
int getNumConstraintRefs() const
Definition: btRigidBody.h:598
void removeConstraintRef(btTypedConstraint *c)
btVector3 getPushVelocityInLocalPoint(const btVector3 &rel_pos) const
Definition: btRigidBody.h:469
void setSleepingThresholds(btScalar linear, btScalar angular)
Definition: btRigidBody.h:299
void setMassProps(btScalar mass, const btVector3 &inertia)
btVector3 m_deltaAngularVelocity
Definition: btRigidBody.h:97
const btTransform & getCenterOfMassTransform() const
Definition: btRigidBody.h:429
const btVector3 & getLinearVelocity() const
Definition: btRigidBody.h:433
btVector3 m_pushVelocity
Definition: btRigidBody.h:100
btScalar getAngularSleepingThreshold() const
Definition: btRigidBody.h:235
void setAngularFactor(const btVector3 &angFac)
Definition: btRigidBody.h:568
void applyTorqueTurnImpulse(const btVector3 &torque)
Definition: btRigidBody.h:407
SIMD_FORCE_INLINE bool wantsSleeping()
Definition: btRigidBody.h:516
SIMD_FORCE_INLINE void updateDeactivation(btScalar timeStep)
Definition: btRigidBody.h:499
bool isInWorld() const
Definition: btRigidBody.h:585
const btVector3 & getCenterOfMassPosition() const
Definition: btRigidBody.h:423
const btVector3 & getTotalForce() const
Definition: btRigidBody.h:279
const btMatrix3x3 & getInvInertiaTensorWorld() const
Definition: btRigidBody.h:265
virtual ~btRigidBody()
Definition: btRigidBody.h:173
btScalar getLinearDamping() const
Definition: btRigidBody.h:220
void clearGravity()
btTypedConstraint * getConstraintRef(int index)
Definition: btRigidBody.h:593
void setInvInertiaDiagLocal(const btVector3 &diagInvInertia)
Definition: btRigidBody.h:294
void setAngularVelocity(const btVector3 &ang_vel)
Definition: btRigidBody.h:451
void setMotionState(btMotionState *motionState)
Definition: btRigidBody.h:557
void translate(const btVector3 &v)
Definition: btRigidBody.h:475
void setPushVelocity(const btVector3 &v)
Definition: btRigidBody.h:369
void applyCentralPushImpulse(const btVector3 &impulse)
Definition: btRigidBody.h:399
void setDamping(btScalar lin_damping, btScalar ang_damping)
void setAngularFactor(btScalar angFac)
Definition: btRigidBody.h:574
void setLinearVelocity(const btVector3 &lin_vel)
Definition: btRigidBody.h:442
void applyPushImpulse(const btVector3 &impulse, const btVector3 &rel_pos)
Definition: btRigidBody.h:347
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
Definition: btRigidBody.cpp:40
void setCenterOfMassTransform(const btTransform &xform)
const btVector3 & getAngularFactor() const
Definition: btRigidBody.h:579
const btVector3 & getInvInertiaDiagLocal() const
Definition: btRigidBody.h:289
void updateInertiaTensor()
void applyTorque(const btVector3 &torque)
Definition: btRigidBody.h:305
void applyForce(const btVector3 &force, const btVector3 &rel_pos)
Definition: btRigidBody.h:313
btVector3 getPushVelocity() const
Definition: btRigidBody.h:359
btVector3 getTurnVelocity() const
Definition: btRigidBody.h:364
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
btVector3 m_invMass
Definition: btRigidBody.h:99
uint pos
IconTextureDrawCall normal
static unsigned c
Definition: RandGen.cpp:83
vec_base< T, 3 > cross(const vec_base< T, 3 > &a, const vec_base< T, 3 > &b)
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
for serialization
Definition: btMatrix3x3.h:1397
for serialization
Definition: btMatrix3x3.h:1391
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:662
btVector3DoubleData m_angularVelocity
Definition: btRigidBody.h:666
btCollisionObjectDoubleData m_collisionObjectData
Definition: btRigidBody.h:663
btVector3DoubleData m_totalForce
Definition: btRigidBody.h:672
btVector3DoubleData m_linearFactor
Definition: btRigidBody.h:668
btVector3DoubleData m_invInertiaLocal
Definition: btRigidBody.h:671
btVector3DoubleData m_totalTorque
Definition: btRigidBody.h:673
double m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:678
btVector3DoubleData m_angularFactor
Definition: btRigidBody.h:667
btMatrix3x3DoubleData m_invInertiaTensorWorld
Definition: btRigidBody.h:664
double m_angularSleepingThreshold
Definition: btRigidBody.h:682
btVector3DoubleData m_linearVelocity
Definition: btRigidBody.h:665
double m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:679
btVector3DoubleData m_gravity
Definition: btRigidBody.h:669
double m_additionalAngularDampingFactor
Definition: btRigidBody.h:680
double m_linearSleepingThreshold
Definition: btRigidBody.h:681
double m_additionalDampingFactor
Definition: btRigidBody.h:677
btVector3DoubleData m_gravity_acceleration
Definition: btRigidBody.h:670
do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
Definition: btRigidBody.h:636
btVector3FloatData m_totalTorque
Definition: btRigidBody.h:647
btVector3FloatData m_linearFactor
Definition: btRigidBody.h:642
btVector3FloatData m_totalForce
Definition: btRigidBody.h:646
btVector3FloatData m_angularVelocity
Definition: btRigidBody.h:640
btVector3FloatData m_angularFactor
Definition: btRigidBody.h:641
btVector3FloatData m_invInertiaLocal
Definition: btRigidBody.h:645
btMatrix3x3FloatData m_invInertiaTensorWorld
Definition: btRigidBody.h:638
float m_additionalLinearDampingThresholdSqr
Definition: btRigidBody.h:652
float m_additionalAngularDampingFactor
Definition: btRigidBody.h:654
btCollisionObjectFloatData m_collisionObjectData
Definition: btRigidBody.h:637
btVector3FloatData m_linearVelocity
Definition: btRigidBody.h:639
float m_angularSleepingThreshold
Definition: btRigidBody.h:656
btVector3FloatData m_gravity
Definition: btRigidBody.h:643
float m_additionalDampingFactor
Definition: btRigidBody.h:651
btVector3FloatData m_gravity_acceleration
Definition: btRigidBody.h:644
float m_linearSleepingThreshold
Definition: btRigidBody.h:655
float m_additionalAngularDampingThresholdSqr
Definition: btRigidBody.h:653
btScalar m_friction
best simulation results when friction is non-zero
Definition: btRigidBody.h:124
btRigidBodyConstructionInfo(btScalar mass, btMotionState *motionState, btCollisionShape *collisionShape, const btVector3 &localInertia=btVector3(0, 0, 0))
Definition: btRigidBody.h:144
btScalar m_restitution
best simulation results using zero restitution.
Definition: btRigidBody.h:131