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;
|
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,
|
&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;
|
yco -= 25;
|
||||||
xco = 0;
|
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,
|
xco+=120, yco, 118, 19, &ob->bsoft->collisionflags, 0, 0, 0, 0,
|
||||||
"Enable cluster collision between soft and soft body");
|
"Enable cluster collision between soft and soft body");
|
||||||
yco -= 25;
|
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;
|
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",
|
uiDefButBitI(block, TOG, OB_BSB_AERO_VTWOSIDE, 0, "Aero model",
|
||||||
xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
|
xco, yco, 118, 19, &ob->bsoft->flag, 0, 0, 0, 0,
|
||||||
"Enable aero model, vertex normals are flipped to match velocity");
|
"Enable aero model, vertex normals are flipped to match velocity");
|
||||||
@ -3037,18 +3063,6 @@ static uiBlock *advanced_bullet_menu(void *arg_ob)
|
|||||||
yco -= 25;
|
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
|
} else
|
||||||
|
@ -1531,6 +1531,46 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
|||||||
btVector3 pivotPointSoftWorld = sb0->m_initialWorldTransform(pivotInA);
|
btVector3 pivotPointSoftWorld = sb0->m_initialWorldTransform(pivotInA);
|
||||||
int node=findClosestNode(sb0,pivotPointSoftWorld);
|
int node=findClosestNode(sb0,pivotPointSoftWorld);
|
||||||
if (node >=0)
|
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)
|
if (rb1)
|
||||||
{
|
{
|
||||||
@ -1540,6 +1580,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
|||||||
sb0->setMass(node,0.f);
|
sb0->setMass(node,0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
return 0;//can't remove soft body anchors yet
|
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);
|
btVector3 pivotPointAWorld = colObj0->getWorldTransform()(pivotInA);
|
||||||
int node=findClosestNode(sb1,pivotPointAWorld);
|
int node=findClosestNode(sb1,pivotPointAWorld);
|
||||||
if (node >=0)
|
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)
|
if (rb0)
|
||||||
{
|
{
|
||||||
@ -1557,6 +1642,9 @@ int CcdPhysicsEnvironment::createConstraint(class PHY_IPhysicsController* ctrl
|
|||||||
sb1->setMass(node,0.f);
|
sb1->setMass(node,0.f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
return 0;//can't remove soft body anchors yet
|
return 0;//can't remove soft body anchors yet
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user