80 (*m_internalPreTickCallback)(
this, timeStep);
165 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::applyRepulsionForce");
178 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::performGeometricCollisions");
227 if (
psb1->isActive() &&
psb2->isActive())
262 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::softBodySelfCollision");
289 rb->setPushVelocity(
zero);
290 rb->setTurnVelocity(
zero);
308 for (
int c = 0; c < 3; c++)
381 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::solveConstraints");
458 bool isSleeping =
false;
464 for (
int b = 0; b <
bod->getNumLinks(); b++)
466 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
477 if (
bod->internalNeedsJointFeedback())
479 if (!
bod->isUsingRK4Integration())
481 if (
bod->internalNeedsJointFeedback())
497 bod->processDeltaVeeMultiDof2();
570 rb->integrateVelocities(timeStep);
582 bool isSleeping =
false;
588 for (
int b = 0; b <
bod->getNumLinks(); b++)
590 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
601 if (!
bod->isUsingRK4Integration())
610 btAssert(
" RK4Integration is not supported");
637 bool isSleeping =
false;
643 for (
int b = 0; b <
bod->getNumLinks(); b++)
645 if (
bod->getLink(b).m_collider &&
bod->getLink(b).m_collider->getActivationState() ==
ISLAND_SLEEPING)
653 for (
int j = 0;
j <
bod->getNumLinks(); ++
j)
665 (*m_internalTickCallback)(
this, timeStep);
686 for (
int i = 0; i <
forces.size(); ++i)
688 if (
forces[i]->getForceType() ==
force->getForceType())
690 forces[i]->addSoftBody(psb);
697 force->addSoftBody(psb);
707 for (
int i = 0; i <
forces.size(); ++i)
709 if (
forces[i]->getForceType() ==
force->getForceType())
711 forces[i]->removeSoftBody(psb);
724 for (
int i = 0; i <
forces.size(); ++i)
726 forces[i]->removeSoftBody(psb);
810 CProfileManager::Increment_Frame_Counter();
#define DISABLE_DEACTIVATION
#define WANTS_DEACTIVATION
const T & btMax(const T &a, const T &b)
btQuaternion inverse(const btQuaternion &q)
Return the inverse of a quaternion.
bool gDisableDeactivation
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
bool btFuzzyZero(btScalar x)
static btMatrix3x3 OuterProduct(const btScalar *v1, const btScalar *v2, const btScalar *v3, const btScalar *u1, const btScalar *u2, const btScalar *u3, int ndof)
static btVector3 generateUnitOrthogonalVector(const btVector3 &u)
static void findJacobian(const btMultiBodyLinkCollider *multibodyLinkCol, btMultiBodyJacobianData &jacobianData, const btVector3 &contact_point, const btVector3 &dir)
btSoftBody implementation by Nathanael Presson
static btMatrix3x3 Diagonal(btScalar x)
btVector3 btCross(const btVector3 &v1, const btVector3 &v2)
Return the cross product of two vectors.
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.
btTransform & getWorldTransform()
int getInternalType() const
reserved for Bullet internal usage
void setActivationState(int newState) const
int getActivationState() const
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
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)
void setConstraints(const btContactSolverInfo &infoGlobal)
btDeformableBackwardEulerObjective * m_objective
void reinitialize(const btAlignedObjectArray< btSoftBody * > &softBodies, btScalar dt)
void setupDeformableSolve(bool implicit)
void setLineSearch(bool lineSearch)
virtual void predictMotion(btScalar solverdt)
Predict motion of soft bodies into next timestep.
void setImplicit(bool implicit)
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
btSoftBodyArray & getSoftBodyArray()
void beforeSolverCallbacks(btScalar timeStep)
void performDeformableCollisionDetection()
btDeformableBodySolver * m_deformableBodySolver
Solver classes that encapsulate multiple deformable bodies for solving.
void updateActions(btScalar timeStep)
bool m_latencyMotionStateInterpolation
btAlignedObjectArray< btTypedConstraint * > m_sortedConstraints
virtual void synchronizeMotionStates()
virtual void saveKinematicState(btScalar timeStep)
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 btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btMatrix3x3 transpose() const
Return the transpose of the matrix.
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 applyGravity()
apply gravity, call this once per timestep
virtual void debugDrawWorld()
static btMultiBodyLinkCollider * upcast(btCollisionObject *colObj)
The btRigidBody is the main class for rigid body objects.
void processIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
void buildIslands(btDispatcher *dispatcher, btCollisionWorld *colWorld)
btMultiBodyJacobianData jacobianData_t1
btMultiBodyJacobianData jacobianData_normal
btMultiBodyJacobianData jacobianData_t2
The btSoftBody is an class to simulate cloth and volumetric soft bodies.
void interpolateRenderMesh()
void defaultCollisionHandler(const btCollisionObjectWrapper *pcoWrap)
btSoftBodyWorldInfo * m_worldInfo
void setSoftBodySolver(btSoftBodySolver *softBodySolver)
btAlignedObjectArray< DeformableFaceNodeContact > m_faceNodeContacts
void updateDeactivation(btScalar timeStep)
void applyRepulsionForce(btScalar timeStep, bool applySpringForce)
btAlignedObjectArray< DeformableNodeRigidAnchor > m_deformableAnchors
btSoftBodyWorldInfo * getWorldInfo()
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.
const btScalar & getZ() const
Return the z value.
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
const btScalar & getY() const
Return the y value.
const btScalar & getX() const
Return the x value.
virtual void processConstraints(int islandId=-1)
virtual void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
btAlignedObjectArray< btScalar > m_deltaVelocitiesUnitImpulse
btAlignedObjectArray< btScalar > m_jacobians
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
btScalar m_maxDisplacement
btBroadphaseInterface * m_broadphase
const btCollisionObject * m_colObj
btScalar Evaluate(const btVector3 &x, const btCollisionShape *shape, btVector3 &normal, btScalar margin)
void setDefaultVoxelsz(btScalar sz)
void Initialize(int hashsize=2383, int clampCells=256 *1024)