Open
Description
CollisionDetectionSystem.txt
`void CollisionDetectionSystem::createSnapshotContacts(Array& contactPairs,
Array& contactManifolds,
Array& contactPoints,
Array& potentialContactManifolds,
Array& potentialContactPoints) {
RP3D_PROFILE("CollisionDetectionSystem::createSnapshotContacts()", mProfiler);
contactManifolds.reserve(contactPairs.size());
contactPoints.reserve(contactManifolds.size());
// For each contact pair
const uint32 nbContactPairs = static_cast<uint32>(contactPairs.size());
for (uint32 p=0; p < nbContactPairs; p++) {
ContactPair& contactPair = contactPairs[p];
// add this continue --------------------------------------------------------------------------
if(contactPair.isTrigger) continue;
// add this continue --------------------------------------------------------------------------
assert(contactPair.nbPotentialContactManifolds > 0);
contactPair.contactManifoldsIndex = static_cast<uint32>(contactManifolds.size());
contactPair.nbContactManifolds = contactPair.nbPotentialContactManifolds;
contactPair.contactPointsIndex = static_cast<uint32>(contactPoints.size());
// For each potential contact manifold of the pair
for (uint32 m = 0; m < contactPair.nbPotentialContactManifolds; m++) {
ContactManifoldInfo& potentialManifold = potentialContactManifolds[contactPair.potentialContactManifoldsIndices[m]];
assert(potentialManifold.nbPotentialContactPoints > 0);
// Start index and number of contact points for this manifold
const uint32 contactPointsIndex = static_cast<uint32>(contactPoints.size());
const uint8 nbContactPoints = potentialManifold.nbPotentialContactPoints;
contactPair.nbToTalContactPoints += nbContactPoints;
// Create and add the contact manifold
contactManifolds.emplace(contactPair.body1Entity, contactPair.body2Entity, contactPair.collider1Entity,
contactPair.collider2Entity, contactPointsIndex, nbContactPoints);
assert(potentialManifold.nbPotentialContactPoints > 0);
// For each contact point of the manifold
for (uint32 c = 0; c < potentialManifold.nbPotentialContactPoints; c++) {
ContactPointInfo& potentialContactPoint = potentialContactPoints[potentialManifold.potentialContactPointsIndices[c]];
// Create a new contact point
ContactPoint contactPoint(potentialContactPoint, mWorld->mConfig.persistentContactDistanceThreshold);
// Add the contact point
contactPoints.add(contactPoint);
}
}
}
}`
When using PhysicsWorld::testCollision on an ordinary capsule collider, I found a static concave trigger collider in the scene could cause this assertion to fail "assert(contactPair.nbPotentialContactManifolds > 0);" So I add a continue. Does it make any sense?
Metadata
Metadata
Assignees
Labels
No labels