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);
221 if (
m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
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(),
257#ifndef USE_BRUTEFORCE_RAYBROADPHASE
258 m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
260 for (
int i = 0;
i < this->getNumCollisionObjects();
i++)
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();
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...
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
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()
btMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration)
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
btBroadphaseRayCallback()
RayResultCallback is used to report new raycast results.
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