23 #define NUM_UNITSPHERE_POINTS 42
85 btIntermediateResult():m_hasResult(
false)
94 virtual void setShapeIdentifiersA(
int partId0,
int index0)
100 virtual void setShapeIdentifiersB(
int partId1,
int index1)
107 m_normalOnBInWorld = normalOnBInWorld;
108 m_pointInWorld = pointInWorld;
119 btVector3 seperatingAxisInA,seperatingAxisInB;
123 #ifdef USE_BATCHED_SUPPORT
133 for (i=0;i<numSampleDirections;i++)
136 seperatingAxisInABatch[i] = (-
norm) * transA.
getBasis() ;
137 seperatingAxisInBBatch[i] = norm * transB.
getBasis() ;
144 for (
int i=0;i<numPDA;i++)
149 sPenetrationDirections[numSampleDirections] =
norm;
150 seperatingAxisInABatch[numSampleDirections] = (-
norm) * transA.
getBasis();
151 seperatingAxisInBBatch[numSampleDirections] = norm * transB.
getBasis();
152 numSampleDirections++;
161 for (
int i=0;i<numPDB;i++)
166 sPenetrationDirections[numSampleDirections] =
norm;
167 seperatingAxisInABatch[numSampleDirections] = (-
norm) * transA.
getBasis();
168 seperatingAxisInBBatch[numSampleDirections] = norm * transB.
getBasis();
169 numSampleDirections++;
179 for (i=0;i<numSampleDirections;i++)
182 seperatingAxisInA = seperatingAxisInABatch[i];
183 seperatingAxisInB = seperatingAxisInBBatch[i];
185 pInA = supportVerticesABatch[i];
186 qInB = supportVerticesBBatch[i];
188 pWorld = transA(pInA);
189 qWorld = transB(qInB);
206 #define DO_PREFERRED_DIRECTIONS 1
207 #ifdef DO_PREFERRED_DIRECTIONS
212 for (
int i=0;i<numPDA;i++)
217 sPenetrationDirections[numSampleDirections] =
norm;
218 numSampleDirections++;
227 for (
int i=0;i<numPDB;i++)
232 sPenetrationDirections[numSampleDirections] =
norm;
233 numSampleDirections++;
237 #endif //DO_PREFERRED_DIRECTIONS
239 for (
int i=0;i<numSampleDirections;i++)
243 seperatingAxisInB = norm* transB.
getBasis();
251 pWorld = transA(pInA);
252 qWorld = transB(qInB);
264 #endif //USE_BATCHED_SUPPORT
268 minA += minNorm*marginA;
269 minB -= minNorm*marginB;
274 minProj += (marginA + marginB) +
btScalar(1.00);
285 debugDraw->
drawLine(minA,minB,color);
289 debugDraw->
drawLine(minA,minA+(minNorm*minProj),color);
313 btIntermediateResult res;
316 btScalar correctedMinNorm = minProj - res.m_depth;
321 minNorm*=penetration_relaxation;
326 pa = res.m_pointInWorld - minNorm * correctedMinNorm;
327 pb = res.m_pointInWorld;
342 return res.m_hasResult;