[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [11178] trunk/blender/extern/bullet2/src: synchronized to latest version of Bullet.
Erwin Coumans
blender at erwincoumans.com
Fri Jul 6 05:12:32 CEST 2007
Revision: 11178
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=11178
Author: erwin
Date: 2007-07-06 05:12:31 +0200 (Fri, 06 Jul 2007)
Log Message:
-----------
synchronized to latest version of Bullet. added btConeTwistConstraint (useful for ragdolls etc)
Modified Paths:
--------------
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btCompoundShape.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMinkowskiSumShape.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btMultiSphereShape.h
trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
trunk/blender/extern/bullet2/src/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btHingeConstraint.h
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btDynamicsWorld.h
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.cpp
trunk/blender/extern/bullet2/src/BulletDynamics/Dynamics/btRigidBody.h
trunk/blender/extern/bullet2/src/LinearMath/btMatrix3x3.h
trunk/blender/extern/bullet2/src/LinearMath/btQuaternion.h
trunk/blender/extern/bullet2/src/LinearMath/btQuickprof.h
trunk/blender/extern/bullet2/src/LinearMath/btScalar.h
trunk/blender/extern/bullet2/src/LinearMath/btTransform.h
trunk/blender/extern/bullet2/src/btBulletDynamicsCommon.h
Added Paths:
-----------
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
trunk/blender/extern/bullet2/src/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h
Modified: trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp 2007-07-06 03:12:31 UTC (rev 11178)
@@ -24,7 +24,8 @@
int gOverlappingPairs = 0;
btOverlappingPairCache::btOverlappingPairCache():
-m_blockedForChanges(false)
+m_blockedForChanges(false),
+m_overlapFilterCallback(0)
//m_NumOverlapBroadphasePair(0)
{
}
Modified: trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h 2007-07-06 03:12:31 UTC (rev 11178)
@@ -26,13 +26,20 @@
struct btOverlapCallback
{
-virtual ~btOverlapCallback()
-{
-}
+ virtual ~btOverlapCallback()
+ {}
//return true for deletion of the pair
virtual bool processOverlap(btBroadphasePair& pair) = 0;
};
+struct btOverlapFilterCallback
+{
+ virtual ~btOverlapFilterCallback()
+ {}
+ // return true when pairs need collision
+ virtual bool needBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const = 0;
+};
+
///btOverlappingPairCache maintains the objects with overlapping AABB
///Typically managed by the Broadphase, Axis3Sweep or btSimpleBroadphase
class btOverlappingPairCache : public btBroadphaseInterface
@@ -44,6 +51,8 @@
//during the dispatch, check that user doesn't destroy/create proxy
bool m_blockedForChanges;
+ //if set, use the callback instead of the built in filter in needBroadphaseCollision
+ btOverlapFilterCallback* m_overlapFilterCallback;
public:
btOverlappingPairCache();
@@ -67,6 +76,9 @@
inline bool needsBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const
{
+ if (m_overlapFilterCallback)
+ return m_overlapFilterCallback->needBroadphaseCollision(proxy0,proxy1);
+
bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
@@ -92,7 +104,17 @@
return m_overlappingPairArray.size();
}
+ btOverlapFilterCallback* getOverlapFilterCallback()
+ {
+ return m_overlapFilterCallback;
+ }
+ void setOverlapFilterCallback(btOverlapFilterCallback* callback)
+ {
+ m_overlapFilterCallback = callback;
+ }
+
};
#endif //OVERLAPPING_PAIR_CACHE_H
+
Modified: trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h 2007-07-06 03:12:31 UTC (rev 11178)
@@ -41,6 +41,8 @@
class btSimpleBroadphase : public btOverlappingPairCache
{
+protected:
+
btSimpleBroadphaseProxy* m_proxies;
int* m_freeProxies;
int m_firstFreeProxy;
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp 2007-07-06 03:12:31 UTC (rev 11178)
@@ -273,6 +273,8 @@
if ((!body0->isActive()) && (!body1->isActive()))
needsCollision = false;
+ else if (!body0->checkCollideWith(body1))
+ needsCollision = false;
return needsCollision ;
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.cpp 2007-07-06 03:12:31 UTC (rev 11178)
@@ -24,11 +24,15 @@
m_userObjectPointer(0),
m_hitFraction(btScalar(1.)),
m_ccdSweptSphereRadius(btScalar(0.)),
- m_ccdSquareMotionThreshold(btScalar(0.))
+ m_ccdSquareMotionThreshold(btScalar(0.)),
+ m_checkCollideWith(false)
{
}
+btCollisionObject::~btCollisionObject()
+{
+}
void btCollisionObject::setActivationState(int newState)
{
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h 2007-07-06 03:12:31 UTC (rev 11178)
@@ -69,16 +69,24 @@
void* m_internalOwner;
///time of impact calculation
- btScalar m_hitFraction;
+ btScalar m_hitFraction;
///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
- btScalar m_ccdSweptSphereRadius;
+ btScalar m_ccdSweptSphereRadius;
/// Don't do continuous collision detection if square motion (in one step) is less then m_ccdSquareMotionThreshold
- btScalar m_ccdSquareMotionThreshold;
+ btScalar m_ccdSquareMotionThreshold;
- char m_pad[8];
+ /// If some object should have elaborate collision filtering by sub-classes
+ bool m_checkCollideWith;
+ char m_pad[7];
+
+ virtual bool checkCollideWithOverride(btCollisionObject* co)
+ {
+ return true;
+ }
+
public:
enum CollisionFlags
@@ -118,6 +126,7 @@
btCollisionObject();
+ virtual ~btCollisionObject();
void setCollisionShape(btCollisionShape* collisionShape)
{
@@ -159,7 +168,7 @@
return ((getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION));
}
- void setRestitution(btScalar rest)
+ void setRestitution(btScalar rest)
{
m_restitution = rest;
}
@@ -322,6 +331,15 @@
m_userObjectPointer = userPointer;
}
+ inline bool checkCollideWith(btCollisionObject* co)
+ {
+ if (m_checkCollideWith)
+ return checkCollideWithOverride(co);
+
+ return true;
+ }
+
+
}
;
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp 2007-07-06 01:33:52 UTC (rev 11177)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionWorld.cpp 2007-07-06 03:12:31 UTC (rev 11178)
@@ -17,6 +17,8 @@
#include "btCollisionDispatcher.h"
#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
#include "BulletCollision/CollisionShapes/btCollisionShape.h"
+#include "BulletCollision/CollisionShapes/btConvexShape.h"
+
#include "BulletCollision/CollisionShapes/btSphereShape.h" //for raycasting
#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h" //for raycasting
#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
@@ -179,12 +181,27 @@
btCollisionObject* collisionObject,
const btCollisionShape* collisionShape,
const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback)
+ RayResultCallback& resultCallback,short int collisionFilterMask)
{
btSphereShape pointShape(btScalar(0.0));
pointShape.setMargin(0.f);
+ objectQuerySingle(&pointShape,rayFromTrans,rayToTrans,
+ collisionObject,
+ collisionShape,
+ colObjWorldTransform,
+ resultCallback,collisionFilterMask);
+}
+
+void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape,const btTransform& rayFromTrans,const btTransform& rayToTrans,
+ btCollisionObject* collisionObject,
+ const btCollisionShape* collisionShape,
+ const btTransform& colObjWorldTransform,
+ RayResultCallback& resultCallback,short int collisionFilterMask)
+{
+
+
if (collisionShape->isConvex())
{
btConvexCast::CastResult castResult;
@@ -192,9 +209,9 @@
btConvexShape* convexShape = (btConvexShape*) collisionShape;
btVoronoiSimplexSolver simplexSolver;
- btSubsimplexConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
- //GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
- //ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
+ btSubsimplexConvexCast convexCaster(castShape,convexShape,&simplexSolver);
+ //GjkConvexCast convexCaster(castShape,convexShape,&simplexSolver);
+ //ContinuousConvexCollision convexCaster(castShape,convexShape,&simplexSolver,0);
if (convexCaster.calcTimeOfImpact(rayFromTrans,rayToTrans,colObjWorldTransform,colObjWorldTransform,castResult))
{
@@ -292,11 +309,11 @@
btTransform childTrans = compoundShape->getChildTransform(i);
const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
btTransform childWorldTrans = colObjWorldTransform * childTrans;
- rayTestSingle(rayFromTrans,rayToTrans,
+ objectQuerySingle(castShape, rayFromTrans,rayToTrans,
collisionObject,
childCollisionShape,
childWorldTrans,
- resultCallback);
+ resultCallback, collisionFilterMask);
}
@@ -306,7 +323,7 @@
}
}
-void btCollisionWorld::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback)
+void btCollisionWorld::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback,short int collisionFilterMask)
{
@@ -323,21 +340,22 @@
for (i=0;i<m_collisionObjects.size();i++)
{
btCollisionObject* collisionObject= m_collisionObjects[i];
+ //only perform raycast if filterMask matches
+ if(collisionObject->getBroadphaseHandle()->m_collisionFilterGroup & collisionFilterMask) {
+ //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list