PositionBasedDynamics
PositionBasedDynamics copied to clipboard
Contact type is confusing
The contact type in https://github.com/InteractiveComputerGraphics/PositionBasedDynamics/blob/b142aad449337cc091611d79a5f1fff85ccc6c40/Simulation/CollisionDetection.h#L14 is not useful at all and should be deleted, although it's not really used in the code.
I assume that https://github.com/InteractiveComputerGraphics/PositionBasedDynamics/blob/b142aad449337cc091611d79a5f1fff85ccc6c40/Simulation/DistanceFieldCollisionDetection.h#L108 is consist with it.
Thus, I think it should be corrected as follows:
static const unsigned int RigidBodyContactType = 0;
static const unsigned int ParticleRigidBodyContactType = 1;
static const unsigned int ParticleSolidContactType = 2;
To be clear when reading the source code, I think it's better to use static value when creating contacts_mt
and contact constraints in void DistanceFieldCollisionDetection::collisionDetection(SimulationModel &model)
such as
https://github.com/InteractiveComputerGraphics/PositionBasedDynamics/blob/b142aad449337cc091611d79a5f1fff85ccc6c40/Simulation/DistanceFieldCollisionDetection.cpp#L163
for (unsigned int i = 0; i < contacts_mt.size(); i++)
{
for (unsigned int j = 0; j < contacts_mt[i].size(); j++)
{
if (contacts_mt[i][j].m_type == CollisionDetection::ParticleRigidBodyContactType)
addParticleRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
contacts_mt[i][j].m_dist, contacts_mt[i][j].m_restitution, contacts_mt[i][j].m_friction);
else if (contacts_mt[i][j].m_type == CollisionDetection::RigidBodyContactType)
addRigidBodyContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
contacts_mt[i][j].m_dist, contacts_mt[i][j].m_restitution, contacts_mt[i][j].m_friction);
else if (contacts_mt[i][j].m_type == CollisionDetection::ParticleSolidContactType)
{
addParticleSolidContact(contacts_mt[i][j].m_index1, contacts_mt[i][j].m_index2,
contacts_mt[i][j].m_elementIndex2, contacts_mt[i][j].m_bary2,
contacts_mt[i][j].m_cp1, contacts_mt[i][j].m_cp2, contacts_mt[i][j].m_normal,
contacts_mt[i][j].m_dist, contacts_mt[i][j].m_restitution, contacts_mt[i][j].m_friction);
m_tempContacts.push_back(contacts_mt[i][j]);
}
}
}