[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