diff options
author | Max Hilbrunner <mhilbrunner@users.noreply.github.com> | 2019-05-16 23:11:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-16 23:11:12 +0200 |
commit | c67bb5f145174bdb64bea42d6ab1154532f90996 (patch) | |
tree | 1099bc2803ebd31ff0cd48bb315883149c4131c2 /modules | |
parent | e20fb10d35fad895f1150232f99448e4812643ae (diff) | |
parent | c1c85555650aa4f976bd880a9b6ab7f21ba0f63a (diff) |
Merge pull request #28595 from godotengine/AndreaCatania-patch-1
Improved CCD calculation algorithm
Diffstat (limited to 'modules')
-rw-r--r-- | modules/bullet/rigid_body_bullet.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/modules/bullet/rigid_body_bullet.cpp b/modules/bullet/rigid_body_bullet.cpp index e5f70a0b34..733a900396 100644 --- a/modules/bullet/rigid_body_bullet.cpp +++ b/modules/bullet/rigid_body_bullet.cpp @@ -741,22 +741,20 @@ void RigidBodyBullet::set_continuous_collision_detection(bool p_enable) { if (p_enable) { // This threshold enable CCD if the object moves more than // 1 meter in one simulation frame - btBody->setCcdMotionThreshold(0.1); + btBody->setCcdMotionThreshold(1e-7); /// Calculate using the rule writte below the CCD swept sphere radius /// CCD works on an embedded sphere of radius, make sure this radius /// is embedded inside the convex objects, preferably smaller: /// for an object of dimensions 1 meter, try 0.2 - btScalar radius; + btScalar radius(1.0); if (btBody->getCollisionShape()) { btVector3 center; btBody->getCollisionShape()->getBoundingSphere(center, radius); - } else { - radius = 0; } btBody->setCcdSweptSphereRadius(radius * 0.2); } else { - btBody->setCcdMotionThreshold(0.); + btBody->setCcdMotionThreshold(10000.0); btBody->setCcdSweptSphereRadius(0.); } } @@ -834,7 +832,7 @@ void RigidBodyBullet::reload_shapes() { btBody->updateInertiaTensor(); reload_kinematic_shapes(); - + set_continuous_collision_detection(btBody->getCcdMotionThreshold() < 9998.0); reload_body(); } |