[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16858] trunk/blender/source: + hook up a few more parameters, that can be useful for Bullet soft bodies
Erwin Coumans
blender at erwincoumans.com
Wed Oct 1 08:36:18 CEST 2008
Revision: 16858
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16858
Author: erwin
Date: 2008-10-01 08:36:17 +0200 (Wed, 01 Oct 2008)
Log Message:
-----------
+ 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)
Modified Paths:
--------------
trunk/blender/source/blender/src/buttons_logic.c
trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
Modified: trunk/blender/source/blender/src/buttons_logic.c
===================================================================
--- trunk/blender/source/blender/src/buttons_logic.c 2008-10-01 03:35:53 UTC (rev 16857)
+++ trunk/blender/source/blender/src/buttons_logic.c 2008-10-01 06:36:17 UTC (rev 16858)
@@ -3004,9 +3004,9 @@
if (ob->bsoft)
{
xco = 0;
- uiDefButF(block, NUMSLI, 0, "LinStiff ", xco, yco, 238, 19,
+ uiDefButF(block, NUMSLI, 0, "LinStiff", xco, yco, 238, 19,
&ob->bsoft->linStiff, 0.0, 1.0, 1, 0,
- "Linear stiffness of the soft body vertex spring");
+ "Linear stiffness of the soft body links");
yco -= 25;
xco = 0;
@@ -3027,9 +3027,35 @@
xco+=120, yco, 118, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0,
"Enable cluster collision between soft and soft body");
yco -= 25;
+ xco = 0;
+ uiDefButI(block, NUM, REDRAWVIEW3D, "Clus.It.",
+ xco, yco, 118, 19, &ob->bsoft->numclusteriterations, 1.0, 128.,
+ 0, 0, "Specify the number of cluster iterations");
+ uiDefButI(block, NUM, REDRAWVIEW3D, "piterations",
+ xco+=120, yco, 118, 19, &ob->bsoft->piterations, 0, 10,
+ 0, 0, "Position solver iterations");
+
+ yco -= 25;
xco = 0;
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "Friction",
+ xco, yco, 118, 19, &ob->bsoft->kDF, 0.0, 1.,
+ 0, 0, "Dynamic Friction");
+
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kMT",
+ xco+=120, yco, 118, 19, &ob->bsoft->kMT, 0, 1,
+ 0, 0, "Pose matching coefficient");
+
+ /*
+ //too complex tweaking, disable for now
+ uiDefButF(block, NUMSLI, REDRAWVIEW3D, "kVC",
+ xco+=80, yco, 80, 19, &ob->bsoft->kVC, 0, 100,
+ 0, 0, "Volume coefficient");
+ */
+
+ xco = 0;
/*
+//would be a cool option, like leaves in the wind, need complex tweaking
uiDefButBitI(block, TOG, OB_BSB_AERO_VTWOSIDE, 0, "Aero model",
xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
"Enable aero model, vertex normals are flipped to match velocity");
@@ -3037,18 +3063,6 @@
yco -= 25;
*/
-
-
- /*
- uiDefButF(block, NUMSLI, 0, "AngStiff ", xco, yco, 238, 19,
- &ob->bsoft->angStiff, 0.0, 1.0, 1, 0,
- "Angular stiffness of the soft body vertex spring");
- yco -= 25;
- uiDefButF(block, NUMSLI, 0, "Volume ", xco, yco, 238, 19,
- &ob->bsoft->volume, 0.0, 1.0, 1, 0,
- "Factor of soft body volume preservation");
- */
-
}
} else
Modified: trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
===================================================================
--- trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp 2008-10-01 03:35:53 UTC (rev 16857)
+++ trunk/blender/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp 2008-10-01 06:36:17 UTC (rev 16858)
@@ -1532,13 +1532,56 @@
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 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
}
More information about the Bf-blender-cvs
mailing list