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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to