Merge pull request #39084 from madmiraal/backport-37314
[3.2] Better damping implementation for Bullet rigid bodies
This commit is contained in:
34
thirdparty/bullet/0001-old-damping-def.patch
vendored
Normal file
34
thirdparty/bullet/0001-old-damping-def.patch
vendored
Normal file
@ -0,0 +1,34 @@
|
||||
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp
|
||||
index 9e8705b001..f1b50b39c8 100644
|
||||
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp
|
||||
+++ b/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp
|
||||
@@ -136,8 +136,13 @@ void btRigidBody::setGravity(const btVector3& acceleration)
|
||||
|
||||
void btRigidBody::setDamping(btScalar lin_damping, btScalar ang_damping)
|
||||
{
|
||||
- m_linearDamping = btClamped(lin_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
- m_angularDamping = btClamped(ang_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
+#ifdef BT_USE_OLD_DAMPING_METHOD
|
||||
+ m_linearDamping = btMax(lin_damping, btScalar(0.0));
|
||||
+ m_angularDamping = btMax(ang_damping, btScalar(0.0));
|
||||
+#else
|
||||
+ m_linearDamping = btClamped(lin_damping, btScalar(0.0), btScalar(1.0));
|
||||
+ m_angularDamping = btClamped(ang_damping, btScalar(0.0), btScalar(1.0));
|
||||
+#endif
|
||||
}
|
||||
|
||||
///applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
|
||||
@@ -146,10 +151,9 @@ void btRigidBody::applyDamping(btScalar timeStep)
|
||||
//On new damping: see discussion/issue report here: http://code.google.com/p/bullet/issues/detail?id=74
|
||||
//todo: do some performance comparisons (but other parts of the engine are probably bottleneck anyway
|
||||
|
||||
-//#define USE_OLD_DAMPING_METHOD 1
|
||||
-#ifdef USE_OLD_DAMPING_METHOD
|
||||
- m_linearVelocity *= GEN_clamped((btScalar(1.) - timeStep * m_linearDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
- m_angularVelocity *= GEN_clamped((btScalar(1.) - timeStep * m_angularDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
+#ifdef BT_USE_OLD_DAMPING_METHOD
|
||||
+ m_linearVelocity *= btMax((btScalar(1.0) - timeStep * m_linearDamping), btScalar(0.0));
|
||||
+ m_angularVelocity *= btMax((btScalar(1.0) - timeStep * m_angularDamping), btScalar(0.0));
|
||||
#else
|
||||
m_linearVelocity *= btPow(btScalar(1) - m_linearDamping, timeStep);
|
||||
m_angularVelocity *= btPow(btScalar(1) - m_angularDamping, timeStep);
|
||||
@ -136,8 +136,13 @@ void btRigidBody::setGravity(const btVector3& acceleration)
|
||||
|
||||
void btRigidBody::setDamping(btScalar lin_damping, btScalar ang_damping)
|
||||
{
|
||||
m_linearDamping = btClamped(lin_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
m_angularDamping = btClamped(ang_damping, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
#ifdef BT_USE_OLD_DAMPING_METHOD
|
||||
m_linearDamping = btMax(lin_damping, btScalar(0.0));
|
||||
m_angularDamping = btMax(ang_damping, btScalar(0.0));
|
||||
#else
|
||||
m_linearDamping = btClamped(lin_damping, btScalar(0.0), btScalar(1.0));
|
||||
m_angularDamping = btClamped(ang_damping, btScalar(0.0), btScalar(1.0));
|
||||
#endif
|
||||
}
|
||||
|
||||
///applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
|
||||
@ -146,10 +151,9 @@ void btRigidBody::applyDamping(btScalar timeStep)
|
||||
//On new damping: see discussion/issue report here: http://code.google.com/p/bullet/issues/detail?id=74
|
||||
//todo: do some performance comparisons (but other parts of the engine are probably bottleneck anyway
|
||||
|
||||
//#define USE_OLD_DAMPING_METHOD 1
|
||||
#ifdef USE_OLD_DAMPING_METHOD
|
||||
m_linearVelocity *= GEN_clamped((btScalar(1.) - timeStep * m_linearDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
m_angularVelocity *= GEN_clamped((btScalar(1.) - timeStep * m_angularDamping), (btScalar)btScalar(0.0), (btScalar)btScalar(1.0));
|
||||
#ifdef BT_USE_OLD_DAMPING_METHOD
|
||||
m_linearVelocity *= btMax((btScalar(1.0) - timeStep * m_linearDamping), btScalar(0.0));
|
||||
m_angularVelocity *= btMax((btScalar(1.0) - timeStep * m_angularDamping), btScalar(0.0));
|
||||
#else
|
||||
m_linearVelocity *= btPow(btScalar(1) - m_linearDamping, timeStep);
|
||||
m_angularVelocity *= btPow(btScalar(1) - m_angularDamping, timeStep);
|
||||
|
||||
Reference in New Issue
Block a user