forked from bartvdbraak/blender
+ 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)
This commit is contained in:
parent
e427b82962
commit
aa5c4f8801
@ -3006,7 +3006,7 @@ static uiBlock *advanced_bullet_menu(void *arg_ob)
|
||||
xco = 0;
|
||||
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 @@ static uiBlock *advanced_bullet_menu(void *arg_ob)
|
||||
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 @@ static uiBlock *advanced_bullet_menu(void *arg_ob)
|
||||
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
|
||||
|
@ -1531,6 +1531,46 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
||||
btVector3 pivotPointSoftWorld = sb0->m_initialWorldTransform(pivotInA);
|
||||
int node=findClosestNode(sb0,pivotPointSoftWorld);
|
||||
if (node >=0)
|
||||
{
|
||||
bool clusterconstaint = false;
|
||||
/*
|
||||
switch (type)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (rb1)
|
||||
{
|
||||
@ -1540,6 +1580,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
||||
sb0->setMass(node,0.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return 0;//can't remove soft body anchors yet
|
||||
}
|
||||
|
||||
@ -1548,6 +1591,48 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
||||
btVector3 pivotPointAWorld = colObj0->getWorldTransform()(pivotInA);
|
||||
int node=findClosestNode(sb1,pivotPointAWorld);
|
||||
if (node >=0)
|
||||
{
|
||||
bool clusterconstaint = false;
|
||||
|
||||
/*
|
||||
switch (type)
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (rb0)
|
||||
{
|
||||
@ -1557,6 +1642,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
||||
sb1->setMass(node,0.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return 0;//can't remove soft body anchors yet
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user