Revision: 16476 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16476 Author: ben2610 Date: 2008-09-11 22:09:07 +0200 (Thu, 11 Sep 2008)
Log Message: ----------- Bullet patch for compound ray cast. The patch is filed in Bullet patch tracker for inclusion in later revision. If it is not included, apply manually extern/bullet2/bullet_compound_raycast.patch Modified Paths: -------------- branches/sim_physics/extern/bullet2/readme.txt branches/sim_physics/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp Added Paths: ----------- branches/sim_physics/extern/bullet2/bullet_compound_raycast.patch Added: branches/sim_physics/extern/bullet2/bullet_compound_raycast.patch =================================================================== --- branches/sim_physics/extern/bullet2/bullet_compound_raycast.patch (rev 0) +++ branches/sim_physics/extern/bullet2/bullet_compound_raycast.patch 2008-09-11 20:09:07 UTC (rev 16476) @@ -0,0 +1,39 @@ +Index: src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp +=================================================================== +--- src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp (r\x82vision 16464) ++++ src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp (copie de travail) +@@ -379,12 +379,16 @@ + btTransform childTrans = compoundShape->getChildTransform(i); + const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i); + btTransform childWorldTrans = colObjWorldTransform * childTrans; ++ // replace collision shape so that callback can determine the triangle ++ btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape(); ++ collisionObject->setCollisionShape((btCollisionShape*)childCollisionShape); + rayTestSingle(rayFromTrans,rayToTrans, + collisionObject, + childCollisionShape, + childWorldTrans, + resultCallback); +- ++ // restore ++ collisionObject->setCollisionShape(saveCollisionShape); + } + } + } +@@ -571,11 +575,16 @@ + btTransform childTrans = compoundShape->getChildTransform(i); + const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i); + btTransform childWorldTrans = colObjWorldTransform * childTrans; ++ // replace collision shape so that callback can determine the triangle ++ btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape(); ++ collisionObject->setCollisionShape((btCollisionShape*)childCollisionShape); + objectQuerySingle(castShape, convexFromTrans,convexToTrans, + collisionObject, + childCollisionShape, + childWorldTrans, + resultCallback, allowedPenetration); ++ // restore ++ collisionObject->setCollisionShape(saveCollisionShape); + } + } + } Modified: branches/sim_physics/extern/bullet2/readme.txt =================================================================== --- branches/sim_physics/extern/bullet2/readme.txt 2008-09-11 16:50:34 UTC (rev 16475) +++ branches/sim_physics/extern/bullet2/readme.txt 2008-09-11 20:09:07 UTC (rev 16476) @@ -1,4 +1,9 @@ +*** +Apply bullet_compound_raycast.patch if not already applied in Bullet source +This patch is needed to return correct raycast results on compound shape. +/ben + *** These files in extern/bullet2 are NOT part of the Blender build yet *** This is the new refactored version of Bullet physics library version 2.x Modified: branches/sim_physics/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp =================================================================== --- branches/sim_physics/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp 2008-09-11 16:50:34 UTC (rev 16475) +++ branches/sim_physics/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp 2008-09-11 20:09:07 UTC (rev 16476) @@ -379,12 +379,16 @@ btTransform childTrans = compoundShape->getChildTransform(i); const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i); btTransform childWorldTrans = colObjWorldTransform * childTrans; + // replace collision shape so that callback can determine the triangle + btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape(); + collisionObject->setCollisionShape((btCollisionShape*)childCollisionShape); rayTestSingle(rayFromTrans,rayToTrans, collisionObject, childCollisionShape, childWorldTrans, resultCallback); - + // restore + collisionObject->setCollisionShape(saveCollisionShape); } } } @@ -571,11 +575,16 @@ btTransform childTrans = compoundShape->getChildTransform(i); const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i); btTransform childWorldTrans = colObjWorldTransform * childTrans; + // replace collision shape so that callback can determine the triangle + btCollisionShape* saveCollisionShape = collisionObject->getCollisionShape(); + collisionObject->setCollisionShape((btCollisionShape*)childCollisionShape); objectQuerySingle(castShape, convexFromTrans,convexToTrans, collisionObject, childCollisionShape, childWorldTrans, resultCallback, allowedPenetration); + // restore + collisionObject->setCollisionShape(saveCollisionShape); } } } _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs