fixed to potential issues, reported by marshall. Thanks!
This commit is contained in:
@@ -108,9 +108,15 @@ public:
|
|||||||
clearUserCache(m_pointCache[index]);
|
clearUserCache(m_pointCache[index]);
|
||||||
|
|
||||||
int lastUsedIndex = getNumContacts() - 1;
|
int lastUsedIndex = getNumContacts() - 1;
|
||||||
|
// m_pointCache[index] = m_pointCache[lastUsedIndex];
|
||||||
|
if(index != lastUsedIndex)
|
||||||
|
{
|
||||||
m_pointCache[index] = m_pointCache[lastUsedIndex];
|
m_pointCache[index] = m_pointCache[lastUsedIndex];
|
||||||
//get rid of duplicated userPersistentData pointer
|
//get rid of duplicated userPersistentData pointer
|
||||||
m_pointCache[lastUsedIndex].m_userPersistentData = 0;
|
m_pointCache[lastUsedIndex].m_userPersistentData = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
btAssert(m_pointCache[lastUsedIndex].m_userPersistentData==0);
|
||||||
m_cachedPoints--;
|
m_cachedPoints--;
|
||||||
}
|
}
|
||||||
void replaceContactPoint(const btManifoldPoint& newPoint,int insertIndex)
|
void replaceContactPoint(const btManifoldPoint& newPoint,int insertIndex)
|
||||||
|
|||||||
@@ -168,13 +168,11 @@ bool btVoronoiSimplexSolver::updateClosestVectorAndPoints()
|
|||||||
closestPtPointTriangle(p,a,b,c,m_cachedBC);
|
closestPtPointTriangle(p,a,b,c,m_cachedBC);
|
||||||
m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
|
m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
|
||||||
m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
|
m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
|
||||||
m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2] +
|
m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2];
|
||||||
m_simplexPointsP[3] * m_cachedBC.m_barycentricCoords[3];
|
|
||||||
|
|
||||||
m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
|
m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
|
||||||
m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
|
m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
|
||||||
m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2] +
|
m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2];
|
||||||
m_simplexPointsQ[3] * m_cachedBC.m_barycentricCoords[3];
|
|
||||||
|
|
||||||
m_cachedV = m_cachedP1-m_cachedP2;
|
m_cachedV = m_cachedP1-m_cachedP2;
|
||||||
|
|
||||||
@@ -525,6 +523,7 @@ bool btVoronoiSimplexSolver::closestPtPointTetrahedron(const btPoint3& p, const
|
|||||||
finalResult.m_closestPointOnSimplex = q;
|
finalResult.m_closestPointOnSimplex = q;
|
||||||
finalResult.m_usedVertices.reset();
|
finalResult.m_usedVertices.reset();
|
||||||
finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
|
finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
|
||||||
|
|
||||||
finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexB;
|
finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexB;
|
||||||
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexC;
|
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexC;
|
||||||
finalResult.setBarycentricCoordinates(
|
finalResult.setBarycentricCoordinates(
|
||||||
@@ -552,8 +551,9 @@ bool btVoronoiSimplexSolver::closestPtPointTetrahedron(const btPoint3& p, const
|
|||||||
finalResult.m_closestPointOnSimplex = q;
|
finalResult.m_closestPointOnSimplex = q;
|
||||||
finalResult.m_usedVertices.reset();
|
finalResult.m_usedVertices.reset();
|
||||||
finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
|
finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
|
||||||
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
|
|
||||||
finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexC;
|
finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexC;
|
||||||
|
|
||||||
|
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
|
||||||
finalResult.setBarycentricCoordinates(
|
finalResult.setBarycentricCoordinates(
|
||||||
tempResult.m_barycentricCoords[VERTA],
|
tempResult.m_barycentricCoords[VERTA],
|
||||||
tempResult.m_barycentricCoords[VERTC],
|
tempResult.m_barycentricCoords[VERTC],
|
||||||
@@ -577,9 +577,10 @@ bool btVoronoiSimplexSolver::closestPtPointTetrahedron(const btPoint3& p, const
|
|||||||
bestSqDist = sqDist;
|
bestSqDist = sqDist;
|
||||||
finalResult.m_closestPointOnSimplex = q;
|
finalResult.m_closestPointOnSimplex = q;
|
||||||
finalResult.m_usedVertices.reset();
|
finalResult.m_usedVertices.reset();
|
||||||
|
//
|
||||||
finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexA;
|
finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexA;
|
||||||
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
|
|
||||||
finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
|
finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
|
||||||
|
finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
|
||||||
|
|
||||||
finalResult.setBarycentricCoordinates(
|
finalResult.setBarycentricCoordinates(
|
||||||
0,
|
0,
|
||||||
|
|||||||
Reference in New Issue
Block a user