16 #ifndef BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
17 #define BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
33 class btDeformableMultiBodyConstraintSolver;
46 bool m_drawClusterTree;
56 btSolverCallback m_solverCallback;
80 m_solverCallback = cb;
159 m_implicit = implicit;
164 m_lineSearch = lineSearch;
169 m_useProjection = useProjection;
198 btVector3 rayDir = (rayToWorld - rayFromWorld);
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)
void applyRigidBodyGravity(btScalar timeStep)
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)
void removeSoftBody(btSoftBody *body)
void reinitialize(btScalar timeStep)
void positionCorrection(btScalar timeStep)
const btSoftBodyArray & getSoftBodyArray() const
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()
virtual const btMultiBodyDynamicsWorld * getMultiBodyDynamicsWorld() const
void solveConstraints(btScalar timeStep)
void addForce(btSoftBody *psb, btDeformableLagrangianForce *force)
void softBodySelfCollision()
btSoftBodyArray & getSoftBodyArray()
void performGeometricCollisions(btScalar timeStep)
void rayTest(const btVector3 &rayFromWorld, const btVector3 &rayToWorld, RayResultCallback &resultCallback) const
virtual void integrateTransforms(btScalar timeStep)
virtual btMultiBodyDynamicsWorld * getMultiBodyDynamicsWorld()
virtual btDynamicsWorldType getWorldType() const
void removeForce(btSoftBody *psb, btDeformableLagrangianForce *force)
virtual void internalSingleStepSimulation(btScalar timeStep)
const btSoftBodyWorldInfo & getWorldInfo() const
void updateActivationState(btScalar timeStep)
virtual ~btDeformableMultiBodyDynamicsWorld()
void solveContactConstraints()
virtual int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))
btSoftBodyWorldInfo & getWorldInfo()
void setSolverCallback(btSolverCallback cb)
void beforeSolverCallbacks(btScalar timeStep)
void performDeformableCollisionDetection()
bool rayFaceTest(const btVector3 &rayFrom, const btVector3 &rayTo, sRayCast &results)
static const btSoftBody * upcast(const btCollisionObject *colObj)
SyclQueue void void size_t num_bytes void
IconTextureDrawCall normal
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