finish deformable sleeping and add option for drag
This commit is contained in:
@@ -101,6 +101,10 @@ void btDeformableBackwardEulerObjective::applyForce(TVStack& force, bool setZero
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
||||||
{
|
{
|
||||||
btScalar one_over_mass = (psb->m_nodes[j].m_im == 0) ? 0 : psb->m_nodes[j].m_im;
|
btScalar one_over_mass = (psb->m_nodes[j].m_im == 0) ? 0 : psb->m_nodes[j].m_im;
|
||||||
|
|||||||
@@ -376,6 +376,7 @@ void btDeformableBodySolver::predictDeformableMotion(btSoftBody* psb, btScalar d
|
|||||||
for (i = 0, ni = psb->m_nodes.size(); i < ni; ++i)
|
for (i = 0, ni = psb->m_nodes.size(); i < ni; ++i)
|
||||||
{
|
{
|
||||||
btSoftBody::Node& n = psb->m_nodes[i];
|
btSoftBody::Node& n = psb->m_nodes[i];
|
||||||
|
n.m_v *= (1 - psb->m_cfg.drag);
|
||||||
n.m_q = n.m_x + n.m_v * dt;
|
n.m_q = n.m_x + n.m_v * dt;
|
||||||
}
|
}
|
||||||
/* Bounds */
|
/* Bounds */
|
||||||
|
|||||||
@@ -80,6 +80,10 @@ public:
|
|||||||
for (int i = 0; i<m_softBodies.size();++i)
|
for (int i = 0; i<m_softBodies.size();++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
||||||
{
|
{
|
||||||
const btSoftBody::Node& node = psb->m_nodes[j];
|
const btSoftBody::Node& node = psb->m_nodes[j];
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
const btSoftBody* psb = m_softBodies[i];
|
const btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_links.size(); ++j)
|
for (int j = 0; j < psb->m_links.size(); ++j)
|
||||||
{
|
{
|
||||||
const btSoftBody::Link& link = psb->m_links[j];
|
const btSoftBody::Link& link = psb->m_links[j];
|
||||||
@@ -83,6 +87,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
const btSoftBody* psb = m_softBodies[i];
|
const btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_links.size(); ++j)
|
for (int j = 0; j < psb->m_links.size(); ++j)
|
||||||
{
|
{
|
||||||
const btSoftBody::Link& link = psb->m_links[j];
|
const btSoftBody::Link& link = psb->m_links[j];
|
||||||
@@ -108,6 +116,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
btScalar scaled_k_damp = m_dampingStiffness * scale;
|
btScalar scaled_k_damp = m_dampingStiffness * scale;
|
||||||
for (int j = 0; j < psb->m_links.size(); ++j)
|
for (int j = 0; j < psb->m_links.size(); ++j)
|
||||||
{
|
{
|
||||||
@@ -138,6 +150,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
const btSoftBody* psb = m_softBodies[i];
|
const btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_links.size(); ++j)
|
for (int j = 0; j < psb->m_links.size(); ++j)
|
||||||
{
|
{
|
||||||
const btSoftBody::Link& link = psb->m_links[j];
|
const btSoftBody::Link& link = psb->m_links[j];
|
||||||
@@ -160,6 +176,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
||||||
{
|
{
|
||||||
sz = btMax(sz, psb->m_nodes[j].index);
|
sz = btMax(sz, psb->m_nodes[j].index);
|
||||||
@@ -188,6 +208,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
const btSoftBody* psb = m_softBodies[i];
|
const btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
btScalar scaled_k = m_elasticStiffness * scale;
|
btScalar scaled_k = m_elasticStiffness * scale;
|
||||||
for (int j = 0; j < psb->m_links.size(); ++j)
|
for (int j = 0; j < psb->m_links.size(); ++j)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -93,6 +93,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_tetraScratches.size(); ++j)
|
for (int j = 0; j < psb->m_tetraScratches.size(); ++j)
|
||||||
{
|
{
|
||||||
btSoftBody::Tetra& tetra = psb->m_tetras[j];
|
btSoftBody::Tetra& tetra = psb->m_tetras[j];
|
||||||
@@ -111,6 +115,10 @@ public:
|
|||||||
for (int i = 0; i < m_softBodies.size(); ++i)
|
for (int i = 0; i < m_softBodies.size(); ++i)
|
||||||
{
|
{
|
||||||
btSoftBody* psb = m_softBodies[i];
|
btSoftBody* psb = m_softBodies[i];
|
||||||
|
if (!psb->isActive())
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
for (int j = 0; j < psb->m_nodes.size(); ++j)
|
||||||
{
|
{
|
||||||
sz = btMax(sz, psb->m_nodes[j].index);
|
sz = btMax(sz, psb->m_nodes[j].index);
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ void btSoftBody::initDefaults()
|
|||||||
m_cfg.piterations = 1;
|
m_cfg.piterations = 1;
|
||||||
m_cfg.diterations = 0;
|
m_cfg.diterations = 0;
|
||||||
m_cfg.citerations = 4;
|
m_cfg.citerations = 4;
|
||||||
|
m_cfg.drag = 0.01;
|
||||||
m_cfg.collisions = fCollision::Default;
|
m_cfg.collisions = fCollision::Default;
|
||||||
m_cfg.collisions |= fCollision::VF_DD;
|
m_cfg.collisions |= fCollision::VF_DD;
|
||||||
m_pose.m_bvolume = false;
|
m_pose.m_bvolume = false;
|
||||||
|
|||||||
@@ -702,6 +702,7 @@ public:
|
|||||||
tVSolverArray m_vsequence; // Velocity solvers sequence
|
tVSolverArray m_vsequence; // Velocity solvers sequence
|
||||||
tPSolverArray m_psequence; // Position solvers sequence
|
tPSolverArray m_psequence; // Position solvers sequence
|
||||||
tPSolverArray m_dsequence; // Drift solvers sequence
|
tPSolverArray m_dsequence; // Drift solvers sequence
|
||||||
|
btScalar drag; // deformable air drag
|
||||||
};
|
};
|
||||||
/* SolverState */
|
/* SolverState */
|
||||||
struct SolverState
|
struct SolverState
|
||||||
|
|||||||
Reference in New Issue
Block a user