mirror of
https://github.com/bulletphysics/bullet3
synced 2024-12-15 06:00:12 +00:00
refresh contact points, even when they are already persistent. needs a bit more work (a 'replacedContactCallback' where optionally the user can carry over the persistent contact data)
This commit is contained in:
parent
745828ab9c
commit
dd8297c86e
@ -74,33 +74,28 @@ void btManifoldResult::addContactPoint(const btVector3& normalOnBInWorld,const b
|
|||||||
|
|
||||||
|
|
||||||
int insertIndex = m_manifoldPtr->getCacheEntry(newPt);
|
int insertIndex = m_manifoldPtr->getCacheEntry(newPt);
|
||||||
|
|
||||||
|
newPt.m_combinedFriction = calculateCombinedFriction(m_body0,m_body1);
|
||||||
|
newPt.m_combinedRestitution = calculateCombinedRestitution(m_body0,m_body1);
|
||||||
|
|
||||||
|
//User can override friction and/or restitution
|
||||||
|
if (gContactAddedCallback &&
|
||||||
|
//and if either of the two bodies requires custom material
|
||||||
|
((m_body0->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) ||
|
||||||
|
(m_body1->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)))
|
||||||
|
{
|
||||||
|
//experimental feature info, for per-triangle material etc.
|
||||||
|
btCollisionObject* obj0 = isSwapped? m_body1 : m_body0;
|
||||||
|
btCollisionObject* obj1 = isSwapped? m_body0 : m_body1;
|
||||||
|
(*gContactAddedCallback)(newPt,obj0,m_partId0,m_index0,obj1,m_partId1,m_index1);
|
||||||
|
}
|
||||||
|
|
||||||
if (insertIndex >= 0)
|
if (insertIndex >= 0)
|
||||||
{
|
{
|
||||||
|
//const btManifoldPoint& oldPoint = m_manifoldPtr->getContactPoint(insertIndex);
|
||||||
// This is not needed, just use the old info!
|
m_manifoldPtr->replaceContactPoint(newPt,insertIndex);
|
||||||
// const btManifoldPoint& oldPoint = m_manifoldPtr->getContactPoint(insertIndex);
|
|
||||||
// newPt.CopyPersistentInformation(oldPoint);
|
|
||||||
// m_manifoldPtr->replaceContactPoint(newPt,insertIndex);
|
|
||||||
|
|
||||||
|
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
|
||||||
newPt.m_combinedFriction = calculateCombinedFriction(m_body0,m_body1);
|
|
||||||
newPt.m_combinedRestitution = calculateCombinedRestitution(m_body0,m_body1);
|
|
||||||
|
|
||||||
//User can override friction and/or restitution
|
|
||||||
if (gContactAddedCallback &&
|
|
||||||
//and if either of the two bodies requires custom material
|
|
||||||
((m_body0->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) ||
|
|
||||||
(m_body1->m_collisionFlags & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)))
|
|
||||||
{
|
|
||||||
//experimental feature info, for per-triangle material etc.
|
|
||||||
btCollisionObject* obj0 = isSwapped? m_body1 : m_body0;
|
|
||||||
btCollisionObject* obj1 = isSwapped? m_body0 : m_body1;
|
|
||||||
(*gContactAddedCallback)(newPt,obj0,m_partId0,m_index0,obj1,m_partId1,m_index1);
|
|
||||||
}
|
|
||||||
|
|
||||||
m_manifoldPtr->AddManifoldPoint(newPt);
|
m_manifoldPtr->AddManifoldPoint(newPt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user