forked from bartvdbraak/blender
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
This commit is contained in:
parent
c40fe7b255
commit
13b0cf94d5
39
extern/bullet2/bullet_compound_raycast.patch
vendored
Normal file
39
extern/bullet2/bullet_compound_raycast.patch
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
Index: src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
|
||||
===================================================================
|
||||
--- src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp (r‚vision 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);
|
||||
}
|
||||
}
|
||||
}
|
5
extern/bullet2/readme.txt
vendored
5
extern/bullet2/readme.txt
vendored
@ -1,3 +1,8 @@
|
||||
***
|
||||
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 ***
|
||||
|
||||
|
@ -379,12 +379,16 @@ void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans,const btTra
|
||||
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 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user