[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16650] trunk/blender: BGE real-time soft bodies, step 2 / 3: create a btSoftBody.
Erwin Coumans
blender at erwincoumans.com
Sun Sep 21 17:17:50 CEST 2008
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. @@
More information about the Bf-blender-cvs
mailing list