16#ifndef BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
17#define BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
33class btDeformableMultiBodyConstraintSolver;
46 bool m_drawClusterTree;
56 btSolverCallback m_solverCallback;
80 m_solverCallback = cb;
102 virtual void addSoftBody(
btSoftBody* body,
int collisionFilterGroup = btBroadphaseProxy::DefaultFilter,
int collisionFilterMask = btBroadphaseProxy::AllFilter);
159 m_implicit = implicit;
164 m_lineSearch = lineSearch;
169 m_useProjection = useProjection;
198 btVector3 rayDir = (rayToWorld - rayFromWorld);
212 virtual bool process(
const btBroadphaseProxy* proxy)
218 btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
226#ifdef RECALCULATE_AABB
227 btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
228 collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
231 const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
232 const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
241 collisionObject->getCollisionShape(),
242 collisionObject->getWorldTransform(),
250 void rayTest(
const btVector3& rayFromWorld,
const btVector3& rayToWorld, RayResultCallback& resultCallback)
const
257#ifndef USE_BRUTEFORCE_RAYBROADPHASE
258 m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
260 for (
int i = 0; i < this->getNumCollisionObjects(); i++)
268 btCollisionObject* collisionObject,
271 RayResultCallback& resultCallback)
const
273 if (collisionShape->isSoftBody())
279 if (softBody->
rayFaceTest(rayFromTrans.getOrigin(), rayToTrans.getOrigin(), softResult))
281 if (softResult.
fraction <= resultCallback.m_closestHitFraction)
287 btVector3 rayDir = rayToTrans.getOrigin() - rayFromTrans.getOrigin();
288 btVector3 normal = -rayDir;
292 if (normal.dot(rayDir) > 0)
303 bool normalInWorldSpace =
true;
304 resultCallback.addSingleResult(rayResult, normalInWorldSpace);
SIMD_FORCE_INLINE btBroadphaseProxy * getBroadphaseHandle()
btCollisionShape
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
btAlignedObjectArray< btSoftBody * > btSoftBodyArray
@ BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
static void rayTestSingle(const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback)
void setImplicit(bool implicit)
void setLineSearch(bool lineSearch)
const btSoftBodyWorldInfo & getWorldInfo() const
void applyRigidBodyGravity(btScalar timeStep)
btSoftBodyWorldInfo & getWorldInfo()
void solveMultiBodyConstraints()
void setUseProjection(bool useProjection)
btDeformableMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btDeformableMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration, btDeformableBodySolver *deformableBodySolver=0)
void removeCollisionObject(btCollisionObject *collisionObject)
virtual void addSoftBody(btSoftBody *body, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
void removeSoftBodyForce(btSoftBody *psb)
const btSoftBodyArray & getSoftBodyArray() const
void removeSoftBody(btSoftBody *body)
void reinitialize(btScalar timeStep)
void positionCorrection(btScalar timeStep)
virtual void predictUnconstraintMotion(btScalar timeStep)
void afterSolverCallbacks(btScalar timeStep)
void applyRepulsionForce(btScalar timeStep)
void rayTestSingle(const btTransform &rayFromTrans, const btTransform &rayToTrans, btCollisionObject *collisionObject, const btCollisionShape *collisionShape, const btTransform &colObjWorldTransform, RayResultCallback &resultCallback) const
virtual void debugDrawWorld()
void solveConstraints(btScalar timeStep)
void addForce(btSoftBody *psb, btDeformableLagrangianForce *force)
void softBodySelfCollision()
void performGeometricCollisions(btScalar timeStep)
void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
virtual void integrateTransforms(btScalar timeStep)
virtual btDynamicsWorldType getWorldType() const
void removeForce(btSoftBody *psb, btDeformableLagrangianForce *force)
virtual void internalSingleStepSimulation(btScalar timeStep)
void updateActivationState(btScalar timeStep)
virtual ~btDeformableMultiBodyDynamicsWorld()
void solveContactConstraints()
virtual int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))
void setSolverCallback(btSolverCallback cb)
virtual const btMultiBodyDynamicsWorld * getMultiBodyDynamicsWorld() const
btSoftBodyArray & getSoftBodyArray()
void beforeSolverCallbacks(btScalar timeStep)
void performDeformableCollisionDetection()
virtual btMultiBodyDynamicsWorld * getMultiBodyDynamicsWorld()
bool rayFaceTest(const btVector3 &rayFrom, const btVector3 &rayTo, sRayCast &results)
static const btSoftBody * upcast(const btCollisionObject *colObj)
btVector3 m_rayDirectionInverse
added some cached data to accelerate ray-AABB tests
RayResultCallback is used to report new raycast results.
btScalar m_closestHitFraction
virtual bool needsCollision(btBroadphaseProxy *proxy0) const
btDeformableSingleRayCallback(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, const btDeformableMultiBodyDynamicsWorld *world, btCollisionWorld::RayResultCallback &resultCallback)
const btDeformableMultiBodyDynamicsWorld * m_world
virtual bool process(const btBroadphaseProxy *proxy)
btTransform m_rayFromTrans
btCollisionWorld::RayResultCallback & m_resultCallback
btScalar fraction
feature index