From 3b09c0b0d5a5bea78f0832532f8c206280ae6456 Mon Sep 17 00:00:00 2001 From: Erwin Coumans Date: Wed, 24 Sep 2008 03:12:10 +0000 Subject: Created a KX_SoftBodyDeformer for real-time soft bodies. Added SetDeformer/GetDeformer() to KX_GameObject. Store mapping between graphics/soft body vertices (work-in-progress) Real-time soft body integration is still very premature, but for a quick preview, see this testfile: http://bulletphysics.com/ftp/pub/test/index.php?dir=blender/&file=soft_test.blend --- .../BroadphaseCollision/btBroadphaseProxy.h | 1 + .../btScaledBvhTriangleMeshShape.cpp | 2 +- .../CollisionShapes/btScaledBvhTriangleMeshShape.h | 12 ++++++++++- extern/bullet2/src/BulletSoftBody/btSoftBody.h | 5 +++-- .../BulletSoftBody/btSoftRigidDynamicsWorld.cpp | 9 +++++++++ .../src/BulletSoftBody/btSoftRigidDynamicsWorld.h | 19 +++++++++++++----- extern/bullet2/src/LinearMath/btConvexHull.cpp | 23 +++++++++++++++++++++- extern/bullet2/src/LinearMath/btConvexHull.h | 3 +++ 8 files changed, 64 insertions(+), 10 deletions(-) (limited to 'extern') diff --git a/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h b/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h index e0bb67f8521..a074a0b150b 100644 --- a/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h +++ b/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h @@ -46,6 +46,7 @@ IMPLICIT_CONVEX_SHAPES_START_HERE, CONCAVE_SHAPES_START_HERE, //keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy! TRIANGLE_MESH_SHAPE_PROXYTYPE, + SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE, ///used for demo integration FAST/Swift collision library and Bullet FAST_CONCAVE_MESH_PROXYTYPE, //terrain diff --git a/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp b/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp index 845a5e3005d..2b81a02b557 100644 --- a/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp +++ b/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp @@ -117,5 +117,5 @@ const btVector3& btScaledBvhTriangleMeshShape::getLocalScaling() const void btScaledBvhTriangleMeshShape::calculateLocalInertia(btScalar mass,btVector3& inertia) const { ///don't make this a movable object! - btAssert(0); +// btAssert(0); } diff --git a/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h b/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h index 8e1d29fc005..0a1ef8ce5cb 100644 --- a/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h +++ b/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h @@ -39,7 +39,7 @@ public: virtual int getShapeType() const { //use un-used 'FAST_CONCAVE_MESH_PROXYTYPE' for now, later add SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE to btBroadphaseProxy.h - return FAST_CONCAVE_MESH_PROXYTYPE; + return SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE; } virtual void getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const; @@ -49,6 +49,16 @@ public: virtual void processAllTriangles(btTriangleCallback* callback,const btVector3& aabbMin,const btVector3& aabbMax) const; + btBvhTriangleMeshShape* getChildShape() + { + return m_bvhTriMeshShape; + } + + const btBvhTriangleMeshShape* getChildShape() const + { + return m_bvhTriMeshShape; + } + //debugging virtual const char* getName()const {return "SCALEDBVHTRIANGLEMESH";} diff --git a/extern/bullet2/src/BulletSoftBody/btSoftBody.h b/extern/bullet2/src/BulletSoftBody/btSoftBody.h index 4306ed9c471..e89bbcc4fa8 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftBody.h +++ b/extern/bullet2/src/BulletSoftBody/btSoftBody.h @@ -29,7 +29,7 @@ subject to the following restrictions: #include "BulletCollision/BroadphaseCollision/btDbvt.h" class btBroadphaseInterface; -class btCollisionDispatcher; +class btDispatcher; /* btSoftBodyWorldInfo */ struct btSoftBodyWorldInfo @@ -39,7 +39,7 @@ struct btSoftBodyWorldInfo btScalar water_offset; btVector3 water_normal; btBroadphaseInterface* m_broadphase; - btCollisionDispatcher* m_dispatcher; + btDispatcher* m_dispatcher; btVector3 m_gravity; btSparseSdf<3> m_sparsesdf; }; @@ -607,6 +607,7 @@ public: virtual ~btSoftBody(); /* Check for existing link */ + btAlignedObjectArray m_userIndexMapping; virtual void setCollisionShape(btCollisionShape* collisionShape) { diff --git a/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp b/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp index 01b9fc0fd35..b363a2efbc1 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp +++ b/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp @@ -21,6 +21,10 @@ subject to the following restrictions: #include "btSoftBody.h" #include "btSoftBodyHelpers.h" + + + + btSoftRigidDynamicsWorld::btSoftRigidDynamicsWorld(btDispatcher* dispatcher,btBroadphaseInterface* pairCache,btConstraintSolver* constraintSolver,btCollisionConfiguration* collisionConfiguration) :btDiscreteDynamicsWorld(dispatcher,pairCache,constraintSolver,collisionConfiguration) { @@ -28,6 +32,11 @@ m_drawFlags = fDrawFlags::Std; m_drawNodeTree = true; m_drawFaceTree = false; m_drawClusterTree = false; +m_sbi.m_broadphase = pairCache; +m_sbi.m_dispatcher = dispatcher; +m_sbi.m_sparsesdf.Initialize(); +m_sbi.m_sparsesdf.Reset(); + } btSoftRigidDynamicsWorld::~btSoftRigidDynamicsWorld() diff --git a/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h b/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h index d0010b65aad..aa8795d897b 100644 --- a/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h +++ b/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h @@ -13,12 +13,12 @@ subject to the following restrictions: 3. This notice may not be removed or altered from any source distribution. */ -#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" - #ifndef BT_SOFT_RIGID_DYNAMICS_WORLD_H #define BT_SOFT_RIGID_DYNAMICS_WORLD_H -class btSoftBody; +#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h" +#include "btSoftBody.h" + typedef btAlignedObjectArray btSoftBodyArray; class btSoftRigidDynamicsWorld : public btDiscreteDynamicsWorld @@ -29,7 +29,8 @@ class btSoftRigidDynamicsWorld : public btDiscreteDynamicsWorld bool m_drawNodeTree; bool m_drawFaceTree; bool m_drawClusterTree; - + btSoftBodyWorldInfo m_sbi; + protected: virtual void predictUnconstraintMotion(btScalar timeStep); @@ -40,7 +41,6 @@ protected: void solveSoftBodiesConstraints(); - public: @@ -57,6 +57,15 @@ public: int getDrawFlags() const { return(m_drawFlags); } void setDrawFlags(int f) { m_drawFlags=f; } + btSoftBodyWorldInfo& getWorldInfo() + { + return m_sbi; + } + const btSoftBodyWorldInfo& getWorldInfo() const + { + return m_sbi; + } + btSoftBodyArray& getSoftBodyArray() { diff --git a/extern/bullet2/src/LinearMath/btConvexHull.cpp b/extern/bullet2/src/LinearMath/btConvexHull.cpp index a20b2059ae9..b8929a86808 100644 --- a/extern/bullet2/src/LinearMath/btConvexHull.cpp +++ b/extern/bullet2/src/LinearMath/btConvexHull.cpp @@ -869,6 +869,8 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, { if ( svcount == 0 ) return false; + m_vertexIndexMapping.resize(0); + #define EPSILON btScalar(0.000001) /* close enough to consider two btScalaring point numbers to be 'the same'. */ @@ -1027,6 +1029,7 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, v[0] = px; v[1] = py; v[2] = pz; + } break; @@ -1041,6 +1044,7 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, dest[2] = pz; vcount++; } + m_vertexIndexMapping.push_back(j); } } @@ -1116,13 +1120,22 @@ bool HullLibrary::CleanupVertices(unsigned int svcount, void HullLibrary::BringOutYourDead(const btVector3* verts,unsigned int vcount, btVector3* overts,unsigned int &ocount,unsigned int *indices,unsigned indexcount) { + btAlignedObjectArraytmpIndices; + tmpIndices.resize(m_vertexIndexMapping.size()); + int i; + + for (i=0;i(vcount)); memset(&usedIndices[0],0,sizeof(unsigned int)*vcount); ocount = 0; - for (unsigned int i=0; i=0 && ocount <= vcount ); usedIndices[static_cast(v)] = ocount; // assign new index remapping + + } } diff --git a/extern/bullet2/src/LinearMath/btConvexHull.h b/extern/bullet2/src/LinearMath/btConvexHull.h index 8bb80de0225..8c36307dfd6 100644 --- a/extern/bullet2/src/LinearMath/btConvexHull.h +++ b/extern/bullet2/src/LinearMath/btConvexHull.h @@ -192,6 +192,9 @@ class HullLibrary public: + btAlignedObjectArray m_vertexIndexMapping; + + HullError CreateConvexHull(const HullDesc& desc, // describes the input request HullResult& result); // contains the resulst HullError ReleaseResult(HullResult &result); // release memory allocated for this result, we are done with it. -- cgit v1.2.3