diff options
Diffstat (limited to 'extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h')
-rw-r--r-- | extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h | 115 |
1 files changed, 12 insertions, 103 deletions
diff --git a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h index 7c121e6df13..f0e07f942af 100644 --- a/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h +++ b/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h @@ -40,7 +40,11 @@ extern bool gDisableDeactivation; enum btRigidBodyFlags { - BT_DISABLE_WORLD_GRAVITY = 1 + BT_DISABLE_WORLD_GRAVITY = 1, + ///The BT_ENABLE_GYROPSCOPIC_FORCE can easily introduce instability + ///So generally it is best to not enable it. + ///If really needed, run at a high frequency like 1000 Hertz: ///See Demos/GyroscopicDemo for an example use + BT_ENABLE_GYROPSCOPIC_FORCE = 2 }; @@ -93,7 +97,7 @@ class btRigidBody : public btCollisionObject protected: - ATTRIBUTE_ALIGNED64(btVector3 m_deltaLinearVelocity); + ATTRIBUTE_ALIGNED16(btVector3 m_deltaLinearVelocity); btVector3 m_deltaAngularVelocity; btVector3 m_angularFactor; btVector3 m_invMass; @@ -125,6 +129,9 @@ public: ///best simulation results when friction is non-zero btScalar m_friction; + ///the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling forever. + ///See Bullet/Demos/RollingFrictionDemo for usage + btScalar m_rollingFriction; ///best simulation results using zero restitution. btScalar m_restitution; @@ -147,6 +154,7 @@ public: m_linearDamping(btScalar(0.)), m_angularDamping(btScalar(0.)), m_friction(btScalar(0.5)), + m_rollingFriction(btScalar(0)), m_restitution(btScalar(0.)), m_linearSleepingThreshold(btScalar(0.8)), m_angularSleepingThreshold(btScalar(1.f)), @@ -494,7 +502,7 @@ public: return (getBroadphaseProxy() != 0); } - virtual bool checkCollideWithOverride(btCollisionObject* co); + virtual bool checkCollideWithOverride(const btCollisionObject* co) const; void addConstraintRef(btTypedConstraint* c); void removeConstraintRef(btTypedConstraint* c); @@ -519,106 +527,7 @@ public: return m_rigidbodyFlags; } - const btVector3& getDeltaLinearVelocity() const - { - return m_deltaLinearVelocity; - } - - const btVector3& getDeltaAngularVelocity() const - { - return m_deltaAngularVelocity; - } - - const btVector3& getPushVelocity() const - { - return m_pushVelocity; - } - - const btVector3& getTurnVelocity() const - { - return m_turnVelocity; - } - - - //////////////////////////////////////////////// - ///some internal methods, don't use them - - btVector3& internalGetDeltaLinearVelocity() - { - return m_deltaLinearVelocity; - } - - btVector3& internalGetDeltaAngularVelocity() - { - return m_deltaAngularVelocity; - } - - const btVector3& internalGetAngularFactor() const - { - return m_angularFactor; - } - - const btVector3& internalGetInvMass() const - { - return m_invMass; - } - - btVector3& internalGetPushVelocity() - { - return m_pushVelocity; - } - - btVector3& internalGetTurnVelocity() - { - return m_turnVelocity; - } - - SIMD_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity ) const - { - velocity = getLinearVelocity()+m_deltaLinearVelocity + (getAngularVelocity()+m_deltaAngularVelocity).cross(rel_pos); - } - - SIMD_FORCE_INLINE void internalGetAngularVelocity(btVector3& angVel) const - { - angVel = getAngularVelocity()+m_deltaAngularVelocity; - } - - - //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position - SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent,const btScalar impulseMagnitude) - { - if (m_inverseMass) - { - m_deltaLinearVelocity += linearComponent*impulseMagnitude; - m_deltaAngularVelocity += angularComponent*(impulseMagnitude*m_angularFactor); - } - } - - SIMD_FORCE_INLINE void internalApplyPushImpulse(const btVector3& linearComponent, const btVector3& angularComponent,btScalar impulseMagnitude) - { - if (m_inverseMass) - { - m_pushVelocity += linearComponent*impulseMagnitude; - m_turnVelocity += angularComponent*(impulseMagnitude*m_angularFactor); - } - } - - void internalWritebackVelocity() - { - if (m_inverseMass) - { - setLinearVelocity(getLinearVelocity()+ m_deltaLinearVelocity); - setAngularVelocity(getAngularVelocity()+m_deltaAngularVelocity); - //m_deltaLinearVelocity.setZero(); - //m_deltaAngularVelocity .setZero(); - //m_originalBody->setCompanionId(-1); - } - } - - - void internalWritebackVelocity(btScalar timeStep); - - + btVector3 computeGyroscopicForce(btScalar maxGyroscopicForce) const; /////////////////////////////////////////////// |