PositionBasedDynamics icon indicating copy to clipboard operation
PositionBasedDynamics copied to clipboard

Contact type is confusing

Open FantasyVR opened this issue 4 years ago • 0 comments

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]);
			}
		}
	}

FantasyVR avatar Feb 15 '20 08:02 FantasyVR