add option to turn self-collision on/off
This commit is contained in:
@@ -3378,6 +3378,16 @@ btSoftBody::vsolver_t btSoftBody::getSolver(eVSolver::_ solver)
|
||||
return (0);
|
||||
}
|
||||
|
||||
void btSoftBody::setSelfCollision(bool useSelfCollision)
|
||||
{
|
||||
m_useSelfCollision = useSelfCollision;
|
||||
}
|
||||
|
||||
bool btSoftBody::useSelfCollision()
|
||||
{
|
||||
return m_useSelfCollision;
|
||||
}
|
||||
|
||||
//
|
||||
void btSoftBody::defaultCollisionHandler(const btCollisionObjectWrapper* pcoWrap)
|
||||
{
|
||||
@@ -3563,16 +3573,19 @@ void btSoftBody::defaultCollisionHandler(btSoftBody* psb)
|
||||
}
|
||||
else
|
||||
{
|
||||
btSoftColliders::CollideFF_DD docollide;
|
||||
docollide.mrg = getCollisionShape()->getMargin() +
|
||||
psb->getCollisionShape()->getMargin();
|
||||
docollide.psb[0] = this;
|
||||
docollide.psb[1] = psb;
|
||||
/* psb0 faces vs psb0 faces */
|
||||
btDbvntNode* root = copyToDbvnt(this->m_fdbvt.m_root);
|
||||
calculateNormalCone(root);
|
||||
this->m_fdbvt.selfCollideT(root,docollide);
|
||||
delete root;
|
||||
if (psb->useSelfCollision())
|
||||
{
|
||||
btSoftColliders::CollideFF_DD docollide;
|
||||
docollide.mrg = getCollisionShape()->getMargin() +
|
||||
psb->getCollisionShape()->getMargin();
|
||||
docollide.psb[0] = this;
|
||||
docollide.psb[1] = psb;
|
||||
/* psb0 faces vs psb0 faces */
|
||||
btDbvntNode* root = copyToDbvnt(this->m_fdbvt.m_root);
|
||||
calculateNormalCone(root);
|
||||
this->m_fdbvt.selfCollideT(root,docollide);
|
||||
delete root;
|
||||
}
|
||||
|
||||
// btSoftColliders::CollideFF_DD docollide;
|
||||
// /* common */
|
||||
|
||||
@@ -790,6 +790,7 @@ public:
|
||||
|
||||
btAlignedObjectArray<btVector4> m_renderNodesInterpolationWeights;
|
||||
btAlignedObjectArray<btAlignedObjectArray<const btSoftBody::Node*> > m_renderNodesParents;
|
||||
bool m_useSelfCollision;
|
||||
|
||||
btAlignedObjectArray<bool> m_clusterConnectivity; //cluster connectivity, for self-collision
|
||||
|
||||
@@ -1006,6 +1007,8 @@ public:
|
||||
/* defaultCollisionHandlers */
|
||||
void defaultCollisionHandler(const btCollisionObjectWrapper* pcoWrap);
|
||||
void defaultCollisionHandler(btSoftBody* psb);
|
||||
void setSelfCollision(bool useSelfCollision);
|
||||
bool useSelfCollision();
|
||||
|
||||
//
|
||||
// Functionality to deal with new accelerated solvers.
|
||||
|
||||
Reference in New Issue
Block a user