dgInt32 dgBroadPhaseDefault::ConvexCast(dgCollisionInstance* const shape, const dgMatrix& matrix, const dgVector& target, dgFloat32& timeToImpact, OnRayPrecastAction prefilter, void* const userData, dgConvexCastReturnInfo* const info, dgInt32 maxContacts, dgInt32 threadIndex) const { dgInt32 totalCount = 0; if (m_rootNode) { dgVector boxP0; dgVector boxP1; dgAssert(matrix.TestOrthogonal()); shape->CalcAABB(matrix, boxP0, boxP1); dgFloat32 distance[DG_BROADPHASE_MAX_STACK_DEPTH]; const dgBroadPhaseNode* stackPool[DG_BROADPHASE_MAX_STACK_DEPTH]; dgVector velocA((target - matrix.m_posit) & dgVector::m_triplexMask); dgVector velocB(dgFloat32(0.0f)); dgFastRayTest ray(dgVector(dgFloat32(0.0f)), velocA); dgVector minBox(m_rootNode->m_minBox - boxP1); dgVector maxBox(m_rootNode->m_maxBox - boxP0); stackPool[0] = m_rootNode; distance[0] = ray.BoxIntersect(minBox, maxBox); totalCount = dgBroadPhase::ConvexCast(stackPool, distance, 1, velocA, velocB, ray, shape, matrix, target, timeToImpact, prefilter, userData, info, maxContacts, threadIndex); } return totalCount; }