[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16712] trunk/blender: Created a KX_SoftBodyDeformer for real-time soft bodies.
Erwin Coumans
blender at erwincoumans.com
Wed Sep 24 05:12:11 CEST 2008
Revision: 16712
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16712
Author: erwin
Date: 2008-09-24 05:12:10 +0200 (Wed, 24 Sep 2008)
Log Message:
-----------
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
Modified Paths:
--------------
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp
trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h
trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp
trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h
trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp
trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.h
trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
trunk/blender/source/gameengine/Converter/BL_DeformableGameObject.h
trunk/blender/source/gameengine/Converter/BL_SkinMeshObject.cpp
trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h
Modified: trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h 2008-09-24 03:12:10 UTC (rev 16712)
@@ -46,6 +46,7 @@
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
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp 2008-09-24 03:12:10 UTC (rev 16712)
@@ -117,5 +117,5 @@
void btScaledBvhTriangleMeshShape::calculateLocalInertia(btScalar mass,btVector3& inertia) const
{
///don't make this a movable object!
- btAssert(0);
+// btAssert(0);
}
Modified: trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h 2008-09-24 03:12:10 UTC (rev 16712)
@@ -39,7 +39,7 @@
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 @@
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";}
Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h 2008-09-24 03:12:10 UTC (rev 16712)
@@ -29,7 +29,7 @@
#include "BulletCollision/BroadphaseCollision/btDbvt.h"
class btBroadphaseInterface;
-class btCollisionDispatcher;
+class btDispatcher;
/* btSoftBodyWorldInfo */
struct btSoftBodyWorldInfo
@@ -39,7 +39,7 @@
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 @@
virtual ~btSoftBody();
/* Check for existing link */
+ btAlignedObjectArray<int> m_userIndexMapping;
virtual void setCollisionShape(btCollisionShape* collisionShape)
{
Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.cpp 2008-09-24 03:12:10 UTC (rev 16712)
@@ -21,6 +21,10 @@
#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_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()
Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftRigidDynamicsWorld.h 2008-09-24 03:12:10 UTC (rev 16712)
@@ -13,12 +13,12 @@
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<btSoftBody*> btSoftBodyArray;
class btSoftRigidDynamicsWorld : public btDiscreteDynamicsWorld
@@ -29,7 +29,8 @@
bool m_drawNodeTree;
bool m_drawFaceTree;
bool m_drawClusterTree;
-
+ btSoftBodyWorldInfo m_sbi;
+
protected:
virtual void predictUnconstraintMotion(btScalar timeStep);
@@ -40,7 +41,6 @@
void solveSoftBodiesConstraints();
-
public:
@@ -57,6 +57,15 @@
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()
{
Modified: trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.cpp 2008-09-24 03:12:10 UTC (rev 16712)
@@ -869,7 +869,9 @@
{
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'. */
vcount = 0;
@@ -1027,6 +1029,7 @@
v[0] = px;
v[1] = py;
v[2] = pz;
+
}
break;
@@ -1041,6 +1044,7 @@
dest[2] = pz;
vcount++;
}
+ m_vertexIndexMapping.push_back(j);
}
}
@@ -1116,13 +1120,22 @@
void HullLibrary::BringOutYourDead(const btVector3* verts,unsigned int vcount, btVector3* overts,unsigned int &ocount,unsigned int *indices,unsigned indexcount)
{
+ btAlignedObjectArray<int>tmpIndices;
+ tmpIndices.resize(m_vertexIndexMapping.size());
+ int i;
+
+ for (i=0;i<m_vertexIndexMapping.size();i++)
+ {
+ tmpIndices[i] = m_vertexIndexMapping[i];
+ }
+
TUIntArray usedIndices;
usedIndices.resize(static_cast<int>(vcount));
memset(&usedIndices[0],0,sizeof(unsigned int)*vcount);
ocount = 0;
- for (unsigned int i=0; i<indexcount; i++)
+ for (i=0; i<indexcount; i++)
{
unsigned int v = indices[i]; // original array index
@@ -1141,11 +1154,19 @@
overts[ocount][1] = verts[v][1];
overts[ocount][2] = verts[v][2];
+ for (int k=0;k<m_vertexIndexMapping.size();k++)
+ {
+ if (tmpIndices[k]==v)
+ m_vertexIndexMapping[k]=ocount;
+ }
+
ocount++; // increment output vert count
btAssert( ocount >=0 && ocount <= vcount );
usedIndices[static_cast<int>(v)] = ocount; // assign new index remapping
+
+
}
}
Modified: trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.h
===================================================================
--- trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.h 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/extern/bullet2/src/LinearMath/btConvexHull.h 2008-09-24 03:12:10 UTC (rev 16712)
@@ -192,6 +192,9 @@
public:
+ btAlignedObjectArray<int> 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.
Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2008-09-24 02:52:47 UTC (rev 16711)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp 2008-09-24 03:12:10 UTC (rev 16712)
@@ -743,7 +743,8 @@
}
// Determine if we need to make a skinned mesh
- if (mesh->dvert || mesh->key) {
+ if (mesh->dvert || mesh->key || ((blenderobj->gameflag & OB_SOFT_BODY) != 0))
+ {
meshobj = new BL_SkinMeshObject(mesh, lightlayer);
skinMesh = true;
}
@@ -1554,20 +1555,20 @@
// not that we can have shape keys without dvert!
BL_ShapeDeformer *dcont = new BL_ShapeDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
+ ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
if (bHasArmature)
dcont->LoadShapeDrivers(ob->parent);
} else if (bHasArmature) {
BL_SkinDeformer *dcont = new BL_SkinDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
+ ((BL_DeformableGameObject*)gameobj)->SetDeformer(dcont);
} else if (bHasDvert) {
// this case correspond to a mesh that can potentially deform but not with the
// object to which it is attached for the moment. A skin mesh was created in
// BL_ConvertMesh() so must create a deformer too!
BL_MeshDeformer *dcont = new BL_MeshDeformer((BL_DeformableGameObject*)gameobj,
ob, (BL_SkinMeshObject*)meshobj);
- ((BL_DeformableGameObject*)gameobj)->m_pDeformer = dcont;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list