33 m_btConvexTriangleCallback(ci.m_dispatcher1, body0Wrap, body1Wrap, isSwapped),
44 if (m_btConvexTriangleCallback.m_manifoldPtr)
46 manifoldArray.
push_back(m_btConvexTriangleCallback.m_manifoldPtr);
77 BT_PROFILE(
"btConvexTriangleCallback::processTriangle");
168 btVector3 extra(extraMargin, extraMargin, extraMargin);
176 m_btConvexTriangleCallback.clearCache();
181 BT_PROFILE(
"btConvexConcaveCollisionAlgorithm::processCollision");
196 if (convex->isPolyhedral())
199 for (
int v = 0;
v < poly->getNumVertices();
v++)
202 poly->getVertex(
v, vtx);
214 if (queryVertices.
size())
220 for (
int v = 0;
v < queryVertices.
size();
v++)
228 if (sdfShape->
queryPoint(vtxInSdf, dist, normalLocal))
232 normalLocal.safeNormalize();
238 dist -= sphere->getRadius();
239 vtxWorldSpace -= sphere->getRadius() *
normal;
255 btScalar collisionMarginTriangle = concaveShape->getMargin();
258 m_btConvexTriangleCallback.setTimeStepAndCounters(collisionMarginTriangle, dispatchInfo, convexBodyWrap, triBodyWrap, resultOut);
262 concaveShape->processAllTriangles(&m_btConvexTriangleCallback, m_btConvexTriangleCallback.getAabbMin(), m_btConvexTriangleCallback.getAabbMax());
266 m_btConvexTriangleCallback.clearWrapperData();
283 btScalar squareMot0 = (convexbody->getInterpolationWorldTransform().getOrigin() - convexbody->getWorldTransform().getOrigin()).
length2();
293 btTransform triInv = triBody->getWorldTransform().inverse();
294 btTransform convexFromLocal = triInv * convexbody->getWorldTransform();
295 btTransform convexToLocal = triInv * convexbody->getInterpolationWorldTransform();
307 : m_ccdSphereFromTrans(
from),
308 m_ccdSphereToTrans(to),
309 m_ccdSphereRadius(ccdSphereRadius),
332 if (convexCaster.calcTimeOfImpact(m_ccdSphereFromTrans, m_ccdSphereToTrans,
333 ident, ident, castResult))
341 if (triBody->getCollisionShape()->isConcave())
343 btVector3 rayAabbMin = convexFromLocal.getOrigin();
344 rayAabbMin.setMin(convexToLocal.getOrigin());
345 btVector3 rayAabbMax = convexFromLocal.getOrigin();
346 rayAabbMax.setMax(convexToLocal.getOrigin());
347 btScalar ccdRadius0 = convexbody->getCcdSweptSphereRadius();
348 rayAabbMin -=
btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
349 rayAabbMax +=
btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
352 LocalTriangleSphereCastCallback raycastCallback(convexFromLocal, convexToLocal,
353 convexbody->getCcdSweptSphereRadius(), curHitFraction);
355 raycastCallback.m_hitFraction = convexbody->getHitFraction();
363 triangleMesh->processAllTriangles(&raycastCallback, rayAabbMin, rayAabbMax);
366 if (raycastCallback.m_hitFraction < convexbody->getHitFraction())
368 convexbody->setHitFraction(raycastCallback.m_hitFraction);
369 return raycastCallback.m_hitFraction;
ATTR_WARN_UNUSED_RESULT const BMVert * v
SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const btVector3 *vertices, const btVector3 &aabbMin, const btVector3 &aabbMax)
conservative test for overlap between triangle and aabb
btScalar m_hitFraction
time of impact calculation
btScalar getCcdSquareMotionThreshold() const
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo &ci, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
virtual ~btConvexConcaveCollisionAlgorithm()
btManifoldResult * m_resultOut
btPersistentManifold * m_manifoldPtr
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)
virtual ~btConvexTriangleCallback()
btScalar m_collisionMarginTriangle
virtual void getAllContactManifolds(btManifoldArray &manifoldArray)
btConvexTriangleCallback(btDispatcher *dispatcher, const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, bool isSwapped)
const btCollisionObjectWrapper * m_triBodyWrap
const btDispatcherInfo * m_dispatchInfoPtr
btDispatcher * m_dispatcher
void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo &dispatchInfo, const btCollisionObjectWrapper *convexBodyWrap, const btCollisionObjectWrapper *triBodyWrap, btManifoldResult *resultOut)
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
const btCollisionObjectWrapper * m_convexBodyWrap
btScalar calculateTimeOfImpact(btCollisionObject *body0, btCollisionObject *body1, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)
btConvexShape()
not supported on IBM SDK, until we fix the alignment of btVector3
@ BT_CLOSEST_POINT_ALGORITHMS
@ BT_CONTACT_POINT_ALGORITHMS
btPolyhedralConvexShape()
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btSphereShape(btScalar radius)
SIMD_FORCE_INLINE btScalar length2() const
Return the length of the vector squared.
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
This class is not enabled yet (work-in-progress) to more aggressively activate objects.
SIMD_FORCE_INLINE int size() const
return the number of elements in the array
SIMD_FORCE_INLINE void push_back(const T &_Val)
virtual void processCollision(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, const btDispatcherInfo &dispatchInfo, btManifoldResult *resultOut)=0
virtual ~btCollisionAlgorithm()
virtual void clearManifold(btPersistentManifold *manifold)=0
virtual void releaseManifold(btPersistentManifold *manifold)=0
virtual void freeCollisionAlgorithm(void *ptr)=0
virtual btPersistentManifold * getNewManifold(const btCollisionObject *b0, const btCollisionObject *b1)=0
virtual btCollisionAlgorithm * findAlgorithm(const btCollisionObjectWrapper *body0Wrap, const btCollisionObjectWrapper *body1Wrap, btPersistentManifold *sharedManifold, ebtDispatcherQueryType queryType)=0
virtual void drawLine(const btVector3 &from, const btVector3 &to, const btVector3 &color)=0
virtual int getDebugMode() const =0
btManifoldResult is a helper class to manage contact results.
virtual void setShapeIdentifiersA(int partId0, int index0)
setShapeIdentifiersA/B provides experimental support for per-triangle material / custom material comb...
void setBody0Wrap(const btCollisionObjectWrapper *obj0Wrap)
const btCollisionObject * getBody0Internal() const
const btCollisionObjectWrapper * getBody1Wrap() const
const btCollisionObjectWrapper * getBody0Wrap() const
void setBody1Wrap(const btCollisionObjectWrapper *obj1Wrap)
void setPersistentManifold(btPersistentManifold *manifoldPtr)
virtual void setShapeIdentifiersB(int partId1, int index1)
btScalar m_closestPointDistanceThreshold
SIMD_FORCE_INLINE void refreshContactPoints()
virtual void addContactPoint(const btVector3 &normalOnBInWorld, const btVector3 &pointInWorld, btScalar depth)
bool queryPoint(const btVector3 &ptInSDF, btScalar &distOut, btVector3 &normal)
virtual void processTriangle(btVector3 *triangle, int partId, int triangleIndex)=0
IconTextureDrawCall normal
btDispatcher * m_dispatcher1
SIMD_FORCE_INLINE const btCollisionShape * getCollisionShape() const
SIMD_FORCE_INLINE const btTransform & getWorldTransform() const
SIMD_FORCE_INLINE const btCollisionObject * getCollisionObject() const
class btIDebugDraw * m_debugDraw