RaycastCCDManager

Defined in include/extensions/PxRaycastCCD.h

class RaycastCCDManager

Raycast-CCD manager.

Raycast-CCD is a simple and potentially cheaper alternative to the SDK’s built-in continuous collision detection algorithm.

This implementation has some limitations:

  • it is only implemented for PxRigidDynamic objects (not for PxArticulationLink)

  • it is only implemented for simple actors with 1 shape (not for “compounds”)

Also, since it is raycast-based, the solution is not perfect. In particular:

  • small dynamic objects can still go through the static world if the ray goes through a crack between edges, or a small hole in the world (like the keyhole from a door).

  • dynamic-vs-dynamic CCD is very approximate. It only works well for fast-moving dynamic objects colliding against slow-moving dynamic objects.

Finally, since it is using the SDK’s scene queries under the hood, it only works provided the simulation shapes also have scene-query shapes associated with them. That is, if the objects in the scene only use PxShapeFlag::eSIMULATION_SHAPE (and no PxShapeFlag::eSCENE_QUERY_SHAPE), then the raycast-CCD system will not work.

Public Functions

RaycastCCDManager(PxScene *scene)
~RaycastCCDManager()
bool registerRaycastCCDObject(PxRigidDynamic *actor, PxShape *shape)

Register dynamic object for raycast CCD.

Parameters
  • actor[in] object’s actor

  • shape[in] object’s shape

Returns

True if success

bool unregisterRaycastCCDObject(PxRigidDynamic *actor, PxShape *shape)

Unregister dynamic object for raycast CCD.

Parameters
  • actor[in] object’s actor

  • shape[in] object’s shape

Returns

True if success

void doRaycastCCD(bool doDynamicDynamicCCD)

Perform raycast CCD.

Call this after your simulate/fetchResults calls.

Parameters

doDynamicDynamicCCD[in] True to enable dynamic-vs-dynamic CCD (more expensive, not always needed)