47 m_linearFactor.setValue(1, 1, 1);
65 if (m_optionalMotionState)
95 m_invMass = m_inverseMass * m_linearFactor;
132 m_gravity = acceleration * (
btScalar(1.0) / m_inverseMass);
134 m_gravity_acceleration = acceleration;
139 #ifdef BT_USE_OLD_DAMPING_METHOD
154 #ifdef BT_USE_OLD_DAMPING_METHOD
162 if (m_additionalDamping)
166 if ((m_angularVelocity.length2() < m_additionalAngularDampingThresholdSqr) &&
167 (m_linearVelocity.length2() < m_additionalLinearDampingThresholdSqr))
169 m_angularVelocity *= m_additionalDampingFactor;
170 m_linearVelocity *= m_additionalDampingFactor;
173 btScalar speed = m_linearVelocity.length();
179 btVector3 dir = m_linearVelocity.normalized();
180 m_linearVelocity -= dir * dampVel;
188 btScalar angSpeed = m_angularVelocity.length();
192 if (angSpeed > angDampVel)
194 btVector3 dir = m_angularVelocity.normalized();
195 m_angularVelocity -= dir * angDampVel;
236 m_inverseMass =
btScalar(1.0) / mass;
240 m_gravity = mass * m_gravity_acceleration;
246 m_invMass = m_linearFactor * m_inverseMass;
257 const btVector3 inertia = m_invInertiaLocal;
267 const btVector3 w2 =
I * w1 + w1.cross(
I * w1) * dt - (
T * dt +
I * w0);
276 w1.getSkewSymmetricMatrix(&w1x[0], &w1x[1], &w1x[2]);
277 Iwi.getSkewSymmetricMatrix(&Iw1x[0], &Iw1x[1], &Iw1x[2]);
290 if (l2 > maxGyroscopicForce * maxGyroscopicForce)
306 Ib.setValue(idl.x(), 0, 0,
316 omegab.getSkewSymmetricMatrix(&skew0[0], &skew0[1], &skew0[2]);
319 om.getSkewSymmetricMatrix(&skew1[0], &skew1[1], &skew1[2]);
329 omegab = omegab - omega_div;
361 dw = dfw.solve33(fw);
377 m_linearVelocity += m_totalForce * (m_inverseMass * step);
378 m_angularVelocity += m_invInertiaTensorWorld * m_totalTorque * step;
380 #define MAX_ANGVEL SIMD_HALF_PI
387 #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
422 if (index == m_constraintRefs.
size())
429 colObjA->setIgnoreCollisionCheck(colObjB,
true);
433 colObjB->setIgnoreCollisionCheck(colObjA,
true);
442 if (index < m_constraintRefs.
size())
449 colObjA->setIgnoreCollisionCheck(colObjB,
false);
453 colObjB->setIgnoreCollisionCheck(colObjA,
false);
471 m_invInertiaTensorWorld.serialize(rbd->m_invInertiaTensorWorld);
472 m_linearVelocity.serialize(rbd->m_linearVelocity);
473 m_angularVelocity.serialize(rbd->m_angularVelocity);
474 rbd->m_inverseMass = m_inverseMass;
476 m_linearFactor.serialize(rbd->m_linearFactor);
477 m_gravity.serialize(rbd->m_gravity);
478 m_gravity_acceleration.serialize(rbd->m_gravity_acceleration);
479 m_invInertiaLocal.serialize(rbd->m_invInertiaLocal);
480 m_totalForce.serialize(rbd->m_totalForce);
481 m_totalTorque.serialize(rbd->m_totalTorque);
482 rbd->m_linearDamping = m_linearDamping;
483 rbd->m_angularDamping = m_angularDamping;
484 rbd->m_additionalDamping = m_additionalDamping;
485 rbd->m_additionalDampingFactor = m_additionalDampingFactor;
486 rbd->m_additionalLinearDampingThresholdSqr = m_additionalLinearDampingThresholdSqr;
487 rbd->m_additionalAngularDampingThresholdSqr = m_additionalAngularDampingThresholdSqr;
488 rbd->m_additionalAngularDampingFactor = m_additionalAngularDampingFactor;
489 rbd->m_linearSleepingThreshold = m_linearSleepingThreshold;
490 rbd->m_angularSleepingThreshold = m_angularSleepingThreshold;
493 #ifdef BT_USE_DOUBLE_PRECISION
494 memset(rbd->m_padding, 0,
sizeof(rbd->m_padding));
btVector3 m_interpolationAngularVelocity
SIMD_FORCE_INLINE bool isStaticOrKinematicObject() const
btTransform m_interpolationWorldTransform
btScalar m_rollingFriction
btScalar m_spinningFriction
virtual ~btCollisionObject()
SIMD_FORCE_INLINE bool isKinematicObject() const
virtual void setCollisionShape(btCollisionShape *collisionShape)
btVector3 m_interpolationLinearVelocity
btTransform & getWorldTransform()
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btScalar m_angularDamping
btMatrix3x3
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
SIMD_FORCE_INLINE const T & btMax(const T &a, const T &b)
SIMD_FORCE_INLINE const T & btClamped(const T &a, const T &lb, const T &ub)
virtual bool serialize(void *o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
Data buffer MUST be 16 byte aligned.
SIMD_FORCE_INLINE btVector3 quatRotate(const btQuaternion &rotation, const btVector3 &v)
bool gDisableDeactivation
btVector3 evalEulerEqn(const btVector3 &w1, const btVector3 &w0, const btVector3 &T, const btScalar dt, const btMatrix3x3 &I)
btScalar gDeactivationTime
btMatrix3x3 evalEulerEqnDeriv(const btVector3 &w1, const btVector3 &w0, const btScalar dt, const btMatrix3x3 &I)
#define btRigidBodyDataName
@ BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btSqrt(btScalar y)
SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y)
#define BT_RIGIDBODY_CODE
btTransform m_worldTransform
btVector3 m_deltaLinearVelocity
btVector3 m_angularVelocity
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
int findLinearSearch(const T &key) const
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
void remove(const T &key)
SIMD_FORCE_INLINE void push_back(const T &_Val)
virtual void getWorldTransform(btTransform &worldTrans) const =0
The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatr...
btQuaternion inverse() const
Return the inverse of this quaternion.
void getAabb(btVector3 &aabbMin, btVector3 &aabbMax) const
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
const btVector3 & getAngularVelocity() const
void integrateVelocities(btScalar step)
void addConstraintRef(btTypedConstraint *c)
virtual void serializeSingleObject(class btSerializer *serializer) const
btMotionState * getMotionState()
void applyDamping(btScalar timeStep)
applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
void applyCentralForce(const btVector3 &force)
virtual const char * serialize(void *dataBuffer, class btSerializer *serializer) const
fills the dataBuffer and returns the struct name (and 0 on failure)
virtual int calculateSerializeBufferSize() const
void setGravity(const btVector3 &acceleration)
btRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
btRigidBody constructor using construction info
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
btVector3 m_angularFactor
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const
perform implicit force computation in body space (inertial frame)
void removeConstraintRef(btTypedConstraint *c)
void setMassProps(btScalar mass, const btVector3 &inertia)
btVector3 m_deltaAngularVelocity
const btVector3 & getLinearVelocity() const
void setDamping(btScalar lin_damping, btScalar ang_damping)
void setupRigidBody(const btRigidBodyConstructionInfo &constructionInfo)
setupRigidBody is only used internally by the constructor
void setCenterOfMassTransform(const btTransform &xform)
void updateInertiaTensor()
void predictIntegratedTransform(btScalar step, btTransform &predictedTransform)
continuous collision detection needs prediction
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
explicit version is best avoided, it gains energy
virtual btChunk * allocate(size_t size, int numElements)=0
virtual void finalizeChunk(btChunk *chunk, const char *structType, int chunkCode, void *oldPtr)=0
btScalar m_friction
best simulation results when friction is non-zero
btScalar m_linearSleepingThreshold
btScalar m_spinningFriction
btScalar m_restitution
best simulation results using zero restitution.
btMotionState * m_motionState
btScalar m_additionalAngularDampingFactor
btScalar m_additionalLinearDampingThresholdSqr
btScalar m_angularDamping
btScalar m_rollingFriction
btScalar m_additionalDampingFactor
btScalar m_angularSleepingThreshold
btCollisionShape * m_collisionShape
btTransform m_startWorldTransform
btScalar m_additionalAngularDampingThresholdSqr