22 #define NUM_UNITSPHERE_POINTS 42
40 btIntermediateResult():m_hasResult(
false)
49 virtual void setShapeIdentifiersA(
int partId0,
int index0)
54 virtual void setShapeIdentifiersB(
int partId1,
int index1)
61 m_normalOnBInWorld = normalOnBInWorld;
62 m_pointInWorld = pointInWorld;
72 btVector3 seperatingAxisInA,seperatingAxisInB;
76 #define USE_BATCHED_SUPPORT 1
78 #ifdef USE_BATCHED_SUPPORT
88 for (i=0;i<numSampleDirections;i++)
91 seperatingAxisInABatch[i] = (-norm) * transA.
getBasis() ;
92 seperatingAxisInBBatch[i] = norm * transB.
getBasis() ;
99 for (
int i=0;i<numPDA;i++)
105 seperatingAxisInABatch[numSampleDirections] = (-norm) * transA.
getBasis();
106 seperatingAxisInBBatch[numSampleDirections] = norm * transB.
getBasis();
107 numSampleDirections++;
116 for (
int i=0;i<numPDB;i++)
122 seperatingAxisInABatch[numSampleDirections] = (-norm) * transA.
getBasis();
123 seperatingAxisInBBatch[numSampleDirections] = norm * transB.
getBasis();
124 numSampleDirections++;
135 for (i=0;i<numSampleDirections;i++)
145 seperatingAxisInA = seperatingAxisInABatch[i];
146 seperatingAxisInB = seperatingAxisInBBatch[i];
148 pInA = supportVerticesABatch[i];
149 qInB = supportVerticesBBatch[i];
151 pWorld = transA(pInA);
152 qWorld = transB(qInB);
180 for (
int i=0;i<numPDA;i++)
186 numSampleDirections++;
195 for (
int i=0;i<numPDB;i++)
201 numSampleDirections++;
207 for (
int i=0;i<numSampleDirections;i++)
210 seperatingAxisInA = (-norm)* transA.
getBasis();
211 seperatingAxisInB = norm* transB.
getBasis();
214 pWorld = transA(pInA);
215 qWorld = transB(qInB);
227 #endif //USE_BATCHED_SUPPORT
249 debugDraw->
drawLine(minA,minB,color);
253 debugDraw->
drawLine(minA,minA+(minNorm*minProj),color);
278 btIntermediateResult res;
282 btScalar correctedMinNorm = minProj - res.m_depth;
287 minNorm*=penetration_relaxation;
293 pa = res.m_pointInWorld - minNorm * correctedMinNorm;
294 pb = res.m_pointInWorld;
307 return res.m_hasResult;
358 return sPenetrationDirections;