Revision: 16650
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16650
Author:   erwin
Date:     2008-09-21 17:17:50 +0200 (Sun, 21 Sep 2008)

Log Message:
-----------
BGE real-time soft bodies, step 2 / 3: create a btSoftBody. Next step is 
hooking up / deform graphics mesh and choose collision shape.
Note: feature is still disabled.

Modified Paths:
--------------
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
    
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
    
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
    trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyInternals.h
    trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
    trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.h
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
    trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.h

Modified: 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
   2008-09-21 13:03:39 UTC (rev 16649)
+++ 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
   2008-09-21 15:17:50 UTC (rev 16650)
@@ -119,7 +119,7 @@
 //
 btDbvtBroadphase::btDbvtBroadphase(btOverlappingPairCache* paircache)
 {
-m_deferedcollide       =       true;//false;
+m_deferedcollide       =       false;
 m_needcleanup          =       true;
 m_releasepaircache     =       (paircache!=0)?false:true;
 m_prediction           =       1/(btScalar)2;
@@ -164,7 +164,7 @@
                                                                                
                                                void* userPtr,
                                                                                
                                                short int collisionFilterGroup,
                                                                                
                                                short int collisionFilterMask,
-                                                                               
                                                btDispatcher* dispatcher,
+                                                                               
                                                btDispatcher* /*dispatcher*/,
                                                                                
                                                void* /*multiSapProxy*/)
 {
 btDbvtProxy*           proxy=new(btAlignedAlloc(sizeof(btDbvtProxy),16)) 
btDbvtProxy(  userPtr,
@@ -180,6 +180,7 @@
        btDbvtTreeCollider      collider(this);
        collider.proxy=proxy;
        btDbvt::collideTV(m_sets[0].m_root,proxy->aabb,collider);
+       btDbvt::collideTV(m_sets[1].m_root,proxy->aabb,collider);
        }
 return(proxy);
 }

Modified: 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
     2008-09-21 13:03:39 UTC (rev 16649)
+++ 
trunk/blender/extern/bullet2/src/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
     2008-09-21 15:17:50 UTC (rev 16650)
@@ -86,7 +86,6 @@
 bool                                   m_releasepaircache;                     
// Release pair cache on delete
 bool                                   m_deferedcollide;                       
// Defere dynamic/static collision to collide call
 bool                                   m_needcleanup;                          
// Need to run cleanup?
-bool                                   m_initialize;                           
// Initialization
 #if DBVT_BP_PROFILE
 btClock                                        m_clock;
 struct {

Modified: 
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
===================================================================
--- 
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
      2008-09-21 13:03:39 UTC (rev 16649)
+++ 
trunk/blender/extern/bullet2/src/BulletCollision/CollisionDispatch/btCollisionObject.h
      2008-09-21 15:17:50 UTC (rev 16650)
@@ -143,7 +143,7 @@
 
        virtual ~btCollisionObject();
 
-       void    setCollisionShape(btCollisionShape* collisionShape)
+       virtual void    setCollisionShape(btCollisionShape* collisionShape)
        {
                m_collisionShape = collisionShape;
                m_rootCollisionShape = collisionShape;

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp      
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.cpp      
2008-09-21 15:17:50 UTC (rev 16650)
@@ -69,7 +69,7 @@
        pm->m_flags     =       fMaterial::Default;
        /* Collision shape      */ 
        ///for now, create a collision shape internally
-       setCollisionShape(new btSoftBodyCollisionShape(this));  
+       m_collisionShape = new btSoftBodyCollisionShape(this);
        m_collisionShape->setMargin(0.25);
        /* Nodes                        */ 
        const btScalar          margin=getCollisionShape()->getMargin();

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h        
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBody.h        
2008-09-21 15:17:50 UTC (rev 16650)
@@ -606,6 +606,13 @@
        /* dtor                                                                 
                                                                */ 
        virtual ~btSoftBody();
        /* Check for existing link                                              
                                                */ 
+
+
+       virtual void    setCollisionShape(btCollisionShape* collisionShape)
+       {
+               //don't do anything, due to the internal shape hack: todo: fix 
this
+       }
+
        bool                            checkLink(      int node0,
                int node1) const;
        bool                            checkLink(      const Node* node0,

Modified: trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyInternals.h
===================================================================
--- trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyInternals.h       
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/extern/bullet2/src/BulletSoftBody/btSoftBodyInternals.h       
2008-09-21 15:17:50 UTC (rev 16650)
@@ -94,7 +94,6 @@
        virtual void    setLocalScaling(const btVector3& /*scaling*/)
        {               
                ///na
-               btAssert(0);
        }
        virtual const btVector3& getLocalScaling() const
        {

Modified: trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp
===================================================================
--- trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/source/gameengine/Converter/BL_BlenderDataConversion.cpp      
2008-09-21 15:17:50 UTC (rev 16650)
@@ -1318,6 +1318,7 @@
        // ACTOR is now a separate feature
        objprop.m_isactor = (blenderobject->gameflag & OB_ACTOR)!=0;
        objprop.m_dyna = (blenderobject->gameflag & OB_DYNAMIC) != 0;
+       objprop.m_softbody = (blenderobject->gameflag & OB_SOFT_BODY) != 0;
        objprop.m_angular_rigidbody = (blenderobject->gameflag & OB_RIGID_BODY) 
!= 0;
        objprop.m_ghost = (blenderobject->gameflag & OB_GHOST) != 0;
        objprop.m_disableSleeping = (blenderobject->gameflag & 
OB_COLLISION_RESPONSE) != 0;//abuse the OB_COLLISION_RESPONSE flag

Modified: trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h    
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObject.h    
2008-09-21 15:17:50 UTC (rev 16650)
@@ -75,6 +75,7 @@
 struct KX_ObjectProperties
 {
        bool    m_dyna;
+       bool    m_softbody;
        double m_radius;
        bool    m_angular_rigidbody;
        bool    m_in_active_layer;

Modified: trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
===================================================================
--- trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp 
2008-09-21 15:17:50 UTC (rev 16650)
@@ -917,6 +917,7 @@
        ci.m_collisionFilterGroup = (isbulletdyna) ? 
short(CcdConstructionInfo::DefaultFilter) : 
short(CcdConstructionInfo::StaticFilter);
        ci.m_collisionFilterMask = (isbulletdyna) ? 
short(CcdConstructionInfo::AllFilter) : short(CcdConstructionInfo::AllFilter ^ 
CcdConstructionInfo::StaticFilter);
        ci.m_bRigid = objprop->m_dyna && objprop->m_angular_rigidbody;
+       ci.m_bSoft = objprop->m_softbody;
        MT_Vector3 scaling = gameobj->NodeGetWorldScaling();
        ci.m_scaling.setValue(scaling[0], scaling[1], scaling[2]);
        KX_BulletPhysicsController* physicscontroller = new 
KX_BulletPhysicsController(ci,isbulletdyna);
@@ -933,10 +934,12 @@
 
        gameobj->SetPhysicsController(physicscontroller,isbulletdyna);
        physicscontroller->setNewClientInfo(gameobj->getClientInfo());          
-       btRigidBody* rbody = physicscontroller->GetRigidBody();
+       {
+               btRigidBody* rbody = physicscontroller->GetRigidBody();
 
-       if (objprop->m_disableSleeping)
-               rbody->setActivationState(DISABLE_DEACTIVATION);
+               if (rbody && objprop->m_disableSleeping)
+                       rbody->setActivationState(DISABLE_DEACTIVATION);
+       }
        
        //Now done directly in ci.m_collisionFlags so that it propagates to 
replica
        //if (objprop->m_ghost)

Modified: 
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp     
2008-09-21 13:03:39 UTC (rev 16649)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp     
2008-09-21 15:17:50 UTC (rev 16650)
@@ -133,7 +133,14 @@
        return btSoftBody::upcast(m_object);
 }
 
+#include "BulletSoftBody/btSoftBodyHelpers.h"
 
+btVector3 pts[3] = {btVector3(0,0,0),
+btVector3(0,1,0),
+btVector3(1,1,0)};
+int triangles[3] = {0,1,2};
+btSoftBodyWorldInfo sbi;
+
 void CcdPhysicsController::CreateRigidbody()
 {
 
@@ -143,14 +150,64 @@
        ///either create a btCollisionObject, btRigidBody or btSoftBody
 
        //create a collision object
-       if (0)//m_cci.m_mass==0.f)
+
+       //disable soft body until first sneak preview is ready
+       if (0)//m_cci.m_bSoft)
        {
                btRigidBody::btRigidBodyConstructionInfo 
rbci(m_cci.m_mass,m_bulletMotionState,m_collisionShape,m_cci.m_localInertiaTensor
 * m_cci.m_inertiaFactor);
                rbci.m_linearDamping = m_cci.m_linearDamping;
                rbci.m_angularDamping = m_cci.m_angularDamping;
                rbci.m_friction = m_cci.m_friction;
                rbci.m_restitution = m_cci.m_restitution;
-               m_object = new btCollisionObject();
+
+               
+               sbi.m_broadphase = this->m_cci.m_physicsEnv->getBroadphase();
+               sbi.m_dispatcher = (btCollisionDispatcher*) 
m_cci.m_physicsEnv->getDispatcher();
+               
+               int nodecount = 0;
+               
+               
+               int numtriangles = 1;
+               
+               btVector3 p = trans.getOrigin();
+               btScalar h = 1.f;
+               
+               PHY__Vector3    grav;
+               m_cci.m_physicsEnv->getGravity(grav);
+               sbi.m_gravity.setValue(grav[0],grav[1],grav[2]);
+
+               const btVector3 c[]={   p+h*btVector3(-1,-1,-1),
+               p+h*btVector3(+1,-1,-1),
+               p+h*btVector3(-1,+1,-1),
+               p+h*btVector3(+1,+1,-1),
+               p+h*btVector3(-1,-1,+1),
+               p+h*btVector3(+1,-1,+1),
+               p+h*btVector3(-1,+1,+1),
+               p+h*btVector3(+1,+1,+1)};
+
+               int i=0;
+               const int n=15;
+               //btSoftBody*   psb=btSoftBodyHelpers::CreateRope(sbi,  
btVector3(-10,0,i*0.25),btVector3(10,0,i*0.25), 16,1+2);
+               btSoftBody* psb = 
btSoftBodyHelpers::CreateFromConvexHull(sbi,c,8);
+
+               m_object = 
psb;//btSoftBodyHelpers::CreateFromTriMesh(sbi,&pts[0].getX(),triangles,numtriangles);
+
+               psb->m_cfg.collisions   =       
btSoftBody::fCollision::SDF_RS;//btSoftBody::fCollision::CL_SS+ 
btSoftBody::fCollision::CL_RS;
+
+               sbi.m_sparsesdf.Reset();
+               sbi.m_sparsesdf.Initialize();
+
+               psb->generateBendingConstraints(2);
+
+               psb->m_cfg.kDF=1;
+               psb->activate();
+               psb->setActivationState(1);
+               psb->setDeactivationTime(1.f);
+               psb->m_cfg.piterations          =       4;
+               //psb->m_materials[0]->m_kLST   =       
0.1+(i/(btScalar)(n-1))*0.9;
+               psb->setTotalMass(20);
+               psb->setCollisionFlags(0);
+
                m_object->setCollisionShape(rbci.m_collisionShape);
                btTransform startTrans;
 


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