Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2008-10-01 10:36:17 +0400
committerErwin Coumans <blender@erwincoumans.com>2008-10-01 10:36:17 +0400
commitaa5c4f8801f64f99be83eb419e9664f732650ede (patch)
tree9666a6eabf4f9772ccaf9725c1dca7f95dbcb518 /source/gameengine
parente427b82962da85480f75c6d0c3e2cb4a88988727 (diff)
+ hook up a few more parameters, that can be useful for Bullet soft bodies
+ work-in-progress to hook up cluster constraints (they are better than node/vertex pinning, because they maintain a proper world coordinate system)
Diffstat (limited to 'source/gameengine')
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp104
1 files changed, 96 insertions, 8 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 72caadadac5..91655e96101 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -1532,13 +1532,56 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
int node=findClosestNode(sb0,pivotPointSoftWorld);
if (node >=0)
{
- if (rb1)
+ bool clusterconstaint = false;
+/*
+ switch (type)
{
- sb0->appendAnchor(node,rb1);
- } else
+ case PHY_LINEHINGE_CONSTRAINT:
+ {
+ if (sb0->clusterCount() && rb1)
+ {
+ btSoftBody::LJoint::Specs ls;
+ ls.erp=0.5f;
+ ls.position=sb0->clusterCom(0);
+ sb0->appendLinearJoint(ls,rb1);
+ clusterconstaint = true;
+ break;
+ }
+ }
+ case PHY_GENERIC_6DOF_CONSTRAINT:
+ {
+ if (sb0->clusterCount() && rb1)
+ {
+ btSoftBody::AJoint::Specs as;
+ as.erp = 1;
+ as.cfm = 1;
+ as.axis.setValue(axisX,axisY,axisZ);
+ sb0->appendAngularJoint(as,rb1);
+ clusterconstaint = true;
+ break;
+ }
+
+ break;
+ }
+ default:
+ {
+
+ }
+ };
+ */
+
+ if (!clusterconstaint)
{
- sb0->setMass(node,0.f);
+ if (rb1)
+ {
+ sb0->appendAnchor(node,rb1);
+ } else
+ {
+ sb0->setMass(node,0.f);
+ }
}
+
+
}
return 0;//can't remove soft body anchors yet
}
@@ -1549,13 +1592,58 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
int node=findClosestNode(sb1,pivotPointAWorld);
if (node >=0)
{
- if (rb0)
+ bool clusterconstaint = false;
+
+ /*
+ switch (type)
{
- sb1->appendAnchor(node,rb0);
- } else
+ case PHY_LINEHINGE_CONSTRAINT:
+ {
+ if (sb1->clusterCount() && rb0)
+ {
+ btSoftBody::LJoint::Specs ls;
+ ls.erp=0.5f;
+ ls.position=sb1->clusterCom(0);
+ sb1->appendLinearJoint(ls,rb0);
+ clusterconstaint = true;
+ break;
+ }
+ }
+ case PHY_GENERIC_6DOF_CONSTRAINT:
+ {
+ if (sb1->clusterCount() && rb0)
+ {
+ btSoftBody::AJoint::Specs as;
+ as.erp = 1;
+ as.cfm = 1;
+ as.axis.setValue(axisX,axisY,axisZ);
+ sb1->appendAngularJoint(as,rb0);
+ clusterconstaint = true;
+ break;
+ }
+
+ break;
+ }
+ default:
+ {
+
+
+ }
+ };*/
+
+
+ if (!clusterconstaint)
{
- sb1->setMass(node,0.f);
+ if (rb0)
+ {
+ sb1->appendAnchor(node,rb0);
+ } else
+ {
+ sb1->setMass(node,0.f);
+ }
}
+
+
}
return 0;//can't remove soft body anchors yet
}