80 (*m_internalPreTickCallback)(
this, timeStep);
165 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::applyRepulsionForce");
178 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::performGeometricCollisions");
227 if (
psb1->isActive() &&
psb2->isActive())
263 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::softBodySelfCollision");
290 rb->setPushVelocity(
zero);
291 rb->setTurnVelocity(
zero);
306 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::solveConstraints");
383 bool isSleeping =
false;
389 for (
int b = 0; b <
bod->getNumLinks(); b++)
391 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
402 if (
bod->internalNeedsJointFeedback())
404 if (!
bod->isUsingRK4Integration())
406 if (
bod->internalNeedsJointFeedback())
422 bod->processDeltaVeeMultiDof2();
501 rb->integrateVelocities(timeStep);
513 bool isSleeping =
false;
519 for (
int b = 0; b <
bod->getNumLinks(); b++)
521 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
532 if (!
bod->isUsingRK4Integration())
541 btAssert(
" RK4Integration is not supported");
568 bool isSleeping =
false;
574 for (
int b = 0; b <
bod->getNumLinks(); b++)
576 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
584 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
596 (*m_internalTickCallback)(
this, timeStep);
617 for (
int i = 0; i <
forces.size(); ++i)
619 if (
forces[i]->getForceType() ==
force->getForceType())
621 forces[i]->addSoftBody(psb);
628 force->addSoftBody(psb);
638 for (
int i = 0; i <
forces.size(); ++i)
640 if (
forces[i]->getForceType() ==
force->getForceType())
642 forces[i]->removeSoftBody(psb);
655 for (
int i = 0; i <
forces.size(); ++i)
657 forces[i]->removeSoftBody(psb);
741 CProfileManager::Increment_Frame_Counter();
#define DISABLE_DEACTIVATION
#define WANTS_DEACTIVATION
const T & btMax(const T &a, const T &b)
bool gDisableDeactivation
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
bool btFuzzyZero(btScalar x)
The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods It...
int size() const
return the number of elements in the array
void resize(int newsize, const T &fillData=T())
void removeAtIndex(int index)
void remove(const T &key)
void quickSort(const L &CompareFunc)
void push_back(const T &_Val)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
btCollisionObject can be used to manage collision detection objects.
void setActivationState(int newState) const
int getActivationState() const
btDispatcher * getDispatcher()
btDispatcherInfo & getDispatchInfo()
virtual btIDebugDraw * getDebugDrawer()
virtual void removeCollisionObject(btCollisionObject *collisionObject)
virtual void addCollisionObject(btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
virtual void performDiscreteCollisionDetection()
btIDebugDraw * m_debugDrawer
virtual void allSolved(const btContactSolverInfo &, class btIDebugDraw *)
virtual void solveDeformableConstraints(btScalar solverdt)
virtual void setConstraints(const btContactSolverInfo &infoGlobal)
virtual void applyTransforms(btScalar timeStep)
virtual void setStrainLimiting(bool opt)
virtual void setPreconditioner(int opt)
virtual void setProjection()
virtual btAlignedObjectArray< btDeformableLagrangianForce * > * getLagrangianForceArray()
virtual void reinitialize(const btAlignedObjectArray< btSoftBody * > &softBodies, btScalar dt)
virtual void setupDeformableSolve(bool implicit)
void setLineSearch(bool lineSearch)
virtual const btAlignedObjectArray< btSoftBody::Node * > * getIndices()
virtual void predictMotion(btScalar solverdt)
Predict motion of soft bodies into next timestep.
void setImplicit(bool implicit)
virtual void setLagrangeMultiplier()
virtual void setGravity(const btVector3 &gravity)
void applyRigidBodyGravity(btScalar timeStep)
btDeformableMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btDeformableMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration, btDeformableBodySolver *deformableBodySolver=0)
void removeCollisionObject(btCollisionObject *collisionObject)
removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise ca...
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)
virtual void predictUnconstraintMotion(btScalar timeStep)
void afterSolverCallbacks(btScalar timeStep)
void applyRepulsionForce(btScalar timeStep)
virtual void debugDrawWorld()
void solveConstraints(btScalar timeStep)
void addForce(btSoftBody *psb, btDeformableLagrangianForce *force)
void softBodySelfCollision()
btSolverCallback m_solverCallback
void performGeometricCollisions(btScalar timeStep)
virtual void integrateTransforms(btScalar timeStep)
void removeForce(btSoftBody *psb, btDeformableLagrangianForce *force)
btSoftBodyWorldInfo m_sbi
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.))
if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's
btSoftBodyArray m_softBodies
DeformableBodyInplaceSolverIslandCallback * m_solverDeformableBodyIslandCallback
virtual void setGravity(const btVector3 &gravity)
btSoftBodyArray & getSoftBodyArray()
void beforeSolverCallbacks(btScalar timeStep)
void performDeformableCollisionDetection()
btDeformableBodySolver * m_deformableBodySolver
Solver classes that encapsulate multiple deformable bodies for solving.
void updateActions(btScalar timeStep)
virtual void setGravity(const btVector3 &gravity)
bool m_latencyMotionStateInterpolation
btAlignedObjectArray< btTypedConstraint * > m_sortedConstraints
virtual void synchronizeMotionStates()
btSimulationIslandManager * m_islandManager
btAlignedObjectArray< btTypedConstraint * > m_constraints
btAlignedObjectArray< btRigidBody * > m_nonStaticRigidBodies
virtual int getNumConstraints() const
virtual void removeCollisionObject(btCollisionObject *collisionObject)
removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise ca...
btConstraintSolver * m_constraintSolver
btCollisionWorld * getCollisionWorld()
void startProfiling(btScalar timeStep)
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
btContactSolverInfo m_solverInfo
btContactSolverInfo & getSolverInfo()
btInternalTickCallback m_internalTickCallback
btInternalTickCallback m_internalPreTickCallback
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
The btMultiBodyDynamicsWorld adds Featherstone multi body dynamics to Bullet This implementation is s...
btAlignedObjectArray< btMultiBodyConstraint * > m_multiBodyConstraints
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
virtual void updateActivationState(btScalar timeStep)
btAlignedObjectArray< btMatrix3x3 > m_scratch_m
btAlignedObjectArray< btVector3 > m_scratch_v
virtual void predictUnconstraintMotion(btScalar timeStep)
virtual void calculateSimulationIslands()
virtual void integrateTransforms(btScalar timeStep)
btAlignedObjectArray< btMultiBody * > m_multiBodies
btAlignedObjectArray< btScalar > m_scratch_r
btAlignedObjectArray< btMultiBodyConstraint * > m_sortedMultiBodyConstraints
virtual void clearMultiBodyConstraintForces()
virtual void saveKinematicState(btScalar timeStep)
virtual void applyGravity()
apply gravity, call this once per timestep
virtual void debugDrawWorld()
The btRigidBody is the main class for rigid body objects.
void processIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
void buildIslands(btDispatcher *dispatcher, btCollisionWorld *colWorld)
The btSoftBody is an class to simulate cloth and volumetric soft bodies.
void defaultCollisionHandler(const btCollisionObjectWrapper *pcoWrap)
btAlignedObjectArray< DeformableFaceNodeContact > m_faceNodeContactsCCD
void setSoftBodySolver(btSoftBodySolver *softBodySolver)
void updateDeactivation(btScalar timeStep)
void applyRepulsionForce(btScalar timeStep, bool applySpringForce)
static const btSoftBody * upcast(const btCollisionObject *colObj)
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btVector3 can be used to represent 3D points and vectors.
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
virtual void processConstraints(int islandId=-1)
virtual void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
static void Draw(btSoftBody *psb, btIDebugDraw *idraw, int drawflags=fDrawFlags::Std)
static void DrawFrame(btSoftBody *psb, btIDebugDraw *idraw)
btDispatcher * m_dispatcher
btSparseSdf< 3 > m_sparsesdf
btBroadphaseInterface * m_broadphase
void setDefaultVoxelsz(btScalar sz)
void Initialize(int hashsize=2383, int clampCells=256 *1024)