22 #define NUM_UNITSPHERE_POINTS 42
32 bool check2d = convexA->isConvex2d() && convexB->isConvex2d();
36 btIntermediateResult() : m_hasResult(
false)
45 virtual void setShapeIdentifiersA(
int partId0,
int index0)
50 virtual void setShapeIdentifiersB(
int partId1,
int index1)
57 m_normalOnBInWorld = normalOnBInWorld;
58 m_pointInWorld = pointInWorld;
68 btVector3 separatingAxisInA, separatingAxisInB;
72 #define USE_BATCHED_SUPPORT 1
74 #ifdef USE_BATCHED_SUPPORT
84 for (i = 0; i < numSampleDirections; i++)
87 separatingAxisInABatch[i] = (-
norm) * transA.getBasis();
88 separatingAxisInBBatch[i] =
norm * transB.getBasis();
92 int numPDA = convexA->getNumPreferredPenetrationDirections();
95 for (
int i = 0; i < numPDA; i++)
98 convexA->getPreferredPenetrationDirection(i,
norm);
101 separatingAxisInABatch[numSampleDirections] = (-
norm) * transA.getBasis();
102 separatingAxisInBBatch[numSampleDirections] =
norm * transB.getBasis();
103 numSampleDirections++;
109 int numPDB = convexB->getNumPreferredPenetrationDirections();
112 for (
int i = 0; i < numPDB; i++)
115 convexB->getPreferredPenetrationDirection(i,
norm);
118 separatingAxisInABatch[numSampleDirections] = (-
norm) * transA.getBasis();
119 separatingAxisInBBatch[numSampleDirections] =
norm * transB.getBasis();
120 numSampleDirections++;
125 convexA->batchedUnitVectorGetSupportingVertexWithoutMargin(separatingAxisInABatch, supportVerticesABatch, numSampleDirections);
126 convexB->batchedUnitVectorGetSupportingVertexWithoutMargin(separatingAxisInBBatch, supportVerticesBBatch, numSampleDirections);
128 for (i = 0; i < numSampleDirections; i++)
135 if (
norm.length2() > 0.01)
137 separatingAxisInA = separatingAxisInABatch[i];
138 separatingAxisInB = separatingAxisInBBatch[i];
140 pInA = supportVerticesABatch[i];
141 qInB = supportVerticesBBatch[i];
143 pWorld = transA(pInA);
144 qWorld = transB(qInB);
169 int numPDA = convexA->getNumPreferredPenetrationDirections();
172 for (
int i = 0; i < numPDA; i++)
175 convexA->getPreferredPenetrationDirection(i,
norm);
178 numSampleDirections++;
184 int numPDB = convexB->getNumPreferredPenetrationDirections();
187 for (
int i = 0; i < numPDB; i++)
190 convexB->getPreferredPenetrationDirection(i,
norm);
193 numSampleDirections++;
199 for (
int i = 0; i < numSampleDirections; i++)
202 separatingAxisInA = (-
norm) * transA.getBasis();
203 separatingAxisInB =
norm * transB.getBasis();
204 pInA = convexA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
205 qInB = convexB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
206 pWorld = transA(pInA);
207 qWorld = transB(qInB);
223 minA += minNorm * convexA->getMarginNonVirtual();
224 minB -= minNorm * convexB->getMarginNonVirtual();
230 minProj += extraSeparation + (convexA->getMarginNonVirtual() + convexB->getMarginNonVirtual());
255 displacedTrans.setOrigin(newOrg);
257 input.m_transformA = displacedTrans;
258 input.m_transformB = transB;
261 btIntermediateResult res;
265 btScalar correctedMinNorm = minProj - res.m_depth;
269 minNorm *= penetration_relaxation;
273 pa = res.m_pointInWorld - minNorm * correctedMinNorm;
274 pb = res.m_pointInWorld;
285 return res.m_hasResult;
335 return sPenetrationDirections;
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Bright Control the brightness and contrast of the input color Vector Map an input vectors to used to fine tune the interpolation of the input Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert a color
ATTR_WARN_UNUSED_RESULT const BMVert * v
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
#define MAX_PREFERRED_PENETRATION_DIRECTIONS
void debugDraw(btIDebugDraw *debugDrawer)
btActionInterface interface
#define NUM_UNITSPHERE_POINTS
SIMD_FORCE_INLINE const btScalar & w() const
Return the w value.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
#define btSimplexSolverInterface
SIMD_FORCE_INLINE btScalar norm() const
Return the norm (length) of the vector.
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
btGjkPairDetector uses GJK to implement the btDiscreteCollisionDetectorInterface
virtual void getClosestPoints(const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw, bool swapResults=false)
void setCachedSeparatingAxis(const btVector3 &separatingAxis)
static btVector3 * getPenetrationDirections()
virtual bool calcPenDepth(btSimplexSolverInterface &simplexSolver, const btConvexShape *convexA, const btConvexShape *convexB, const btTransform &transA, const btTransform &transB, btVector3 &v, btVector3 &pa, btVector3 &pb, class btIDebugDraw *debugDraw)
SyclQueue void void size_t num_bytes void
ccl_gpu_kernel_postfix ccl_global float int int int int float bool int offset
ccl_global KernelShaderEvalInput * input