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 ***
|
*** 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);
|
btTransform childTrans = compoundShape->getChildTransform(i);
|
||||||
const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
|
const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
|
||||||
btTransform childWorldTrans = colObjWorldTransform * childTrans;
|
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,
|
rayTestSingle(rayFromTrans,rayToTrans,
|
||||||
collisionObject,
|
collisionObject,
|
||||||
childCollisionShape,
|
childCollisionShape,
|
||||||
childWorldTrans,
|
childWorldTrans,
|
||||||
resultCallback);
|
resultCallback);
|
||||||
|
// restore
|
||||||
|
collisionObject->setCollisionShape(saveCollisionShape);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -571,11 +575,16 @@ void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const bt
|
|||||||
btTransform childTrans = compoundShape->getChildTransform(i);
|
btTransform childTrans = compoundShape->getChildTransform(i);
|
||||||
const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
|
const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
|
||||||
btTransform childWorldTrans = colObjWorldTransform * childTrans;
|
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,
|
objectQuerySingle(castShape, convexFromTrans,convexToTrans,
|
||||||
collisionObject,
|
collisionObject,
|
||||||
childCollisionShape,
|
childCollisionShape,
|
||||||
childWorldTrans,
|
childWorldTrans,
|
||||||
resultCallback, allowedPenetration);
|
resultCallback, allowedPenetration);
|
||||||
|
// restore
|
||||||
|
collisionObject->setCollisionShape(saveCollisionShape);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user