prepare to add ForkLiftDemo in App_AllBullet2Demos
rename Ewert/Catto to World/Body for implicit coriolis forces
This commit is contained in:
@@ -1274,14 +1274,14 @@ btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(btCol
|
||||
gyroForce = body->computeGyroscopicForceExplicit(infoGlobal.m_maxGyroscopicForce);
|
||||
solverBody.m_externalTorqueImpulse -= gyroForce*body->getInvInertiaTensorWorld()*infoGlobal.m_timeStep;
|
||||
}
|
||||
if (body->getFlags()&BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_EWERT)
|
||||
if (body->getFlags()&BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD)
|
||||
{
|
||||
gyroForce = body->computeGyroscopicImpulseImplicit_Ewert(infoGlobal.m_timeStep);
|
||||
gyroForce = body->computeGyroscopicImpulseImplicit_World(infoGlobal.m_timeStep);
|
||||
solverBody.m_externalTorqueImpulse += gyroForce;
|
||||
}
|
||||
if (body->getFlags()&BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_CATTO)
|
||||
if (body->getFlags()&BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY)
|
||||
{
|
||||
gyroForce = body->computeGyroscopicImpulseImplicit_Catto(infoGlobal.m_timeStep);
|
||||
gyroForce = body->computeGyroscopicImpulseImplicit_Body(infoGlobal.m_timeStep);
|
||||
solverBody.m_externalTorqueImpulse += gyroForce;
|
||||
|
||||
}
|
||||
|
||||
@@ -87,7 +87,7 @@ void btRigidBody::setupRigidBody(const btRigidBody::btRigidBodyConstructionInfo&
|
||||
setMassProps(constructionInfo.m_mass, constructionInfo.m_localInertia);
|
||||
updateInertiaTensor();
|
||||
|
||||
m_rigidbodyFlags = BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_EWERT;
|
||||
m_rigidbodyFlags = BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY;
|
||||
|
||||
|
||||
m_deltaLinearVelocity.setZero();
|
||||
@@ -311,7 +311,7 @@ void btSetCrossMatrixMinus(btMatrix3x3& res, const btVector3& a)
|
||||
+a_1, -a_0, 0);
|
||||
}
|
||||
|
||||
btVector3 btRigidBody::computeGyroscopicImpulseImplicit_Catto(btScalar step) const
|
||||
btVector3 btRigidBody::computeGyroscopicImpulseImplicit_Body(btScalar step) const
|
||||
{
|
||||
btVector3 idl = getLocalInertia();
|
||||
btVector3 omega1 = getAngularVelocity();
|
||||
@@ -352,7 +352,7 @@ btVector3 btRigidBody::computeGyroscopicImpulseImplicit_Catto(btScalar step) con
|
||||
|
||||
|
||||
|
||||
btVector3 btRigidBody::computeGyroscopicImpulseImplicit_Ewert(btScalar step) const
|
||||
btVector3 btRigidBody::computeGyroscopicImpulseImplicit_World(btScalar step) const
|
||||
{
|
||||
// use full newton-euler equations. common practice to drop the wxIw term. want it for better tumbling behavior.
|
||||
// calculate using implicit euler step so it's stable.
|
||||
|
||||
@@ -44,8 +44,8 @@ enum btRigidBodyFlags
|
||||
///BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
|
||||
///See Demos/GyroscopicDemo and computeGyroscopicImpulseImplicit
|
||||
BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT = 2,
|
||||
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_EWERT=4,
|
||||
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_CATTO=8,
|
||||
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD=4,
|
||||
BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY=8,
|
||||
};
|
||||
|
||||
|
||||
@@ -533,8 +533,11 @@ public:
|
||||
|
||||
|
||||
|
||||
btVector3 computeGyroscopicImpulseImplicit_Ewert(btScalar dt) const;
|
||||
btVector3 computeGyroscopicImpulseImplicit_Catto(btScalar step) const;
|
||||
///perform implicit force computation in world space
|
||||
btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const;
|
||||
|
||||
///perform implicit force computation in body space (inertial frame)
|
||||
btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const;
|
||||
|
||||
///explicit version is best avoided, it gains energy
|
||||
btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
|
||||
|
||||
Reference in New Issue
Block a user