Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
44 m_deformableBodySolver(deformableBodySolver),
80 (*m_internalPreTickCallback)(
this, timeStep);
165 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::applyRepulsionForce");
178 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::performGeometricCollisions");
234 int penetration_count = 0;
243 if (penetration_count == 0)
262 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::softBodySelfCollision");
285 if (pushVelocity[0] != 0.f || pushVelocity[1] != 0 || pushVelocity[2] != 0 || turnVelocity[0] != 0.f || turnVelocity[1] != 0 || turnVelocity[2] != 0)
307 btScalar clampDeltaV = maxDisplacement / timeStep;
308 for (
int c = 0; c < 3; c++)
310 if (node.
m_v[c] > clampDeltaV)
312 node.
m_v[c] = clampDeltaV;
314 if (node.
m_v[c] < -clampDeltaV)
316 node.
m_v[c] = -clampDeltaV;
334 if (multibodyLinkCol)
381 BT_PROFILE(
"btDeformableMultiBodyDynamicsWorld::solveConstraints");
458 bool isSleeping =
false;
483 bool isConstraintPass =
true;
510 collisionFilterGroup,
511 collisionFilterMask);
582 bool isSleeping =
false;
599 bool isConstraintPass =
false;
610 btAssert(
" RK4Integration is not supported");
637 bool isSleeping =
false;
665 (*m_internalTickCallback)(
this, timeStep);
686 for (
int i = 0; i < forces.
size(); ++i)
690 forces[i]->addSoftBody(psb);
706 int removed_index = -1;
707 for (
int i = 0; i < forces.
size(); ++i)
711 forces[i]->removeSoftBody(psb);
717 if (removed_index >= 0)
724 for (
int i = 0; i < forces.
size(); ++i)
726 forces[i]->removeSoftBody(psb);
752 int numSimulationSubSteps = 0;
761 numSimulationSubSteps = int(
m_localTime / fixedTimeStep);
762 m_localTime -= numSimulationSubSteps * fixedTimeStep;
768 fixedTimeStep = timeStep;
773 numSimulationSubSteps = 0;
778 numSimulationSubSteps = 1;
789 if (numSimulationSubSteps)
792 int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps) ? maxSubSteps : numSimulationSubSteps;
796 for (
int i = 0; i < clampedSimulationSteps; i++)
809 #ifndef BT_NO_PROFILE
810 CProfileManager::Increment_Frame_Counter();
811 #endif //BT_NO_PROFILE
813 return numSimulationSubSteps;
btIDebugDraw * m_debugDrawer
btMultiBodyJacobianData jacobianData_t2
void updateDeactivation(btScalar timeStep)
btAlignedObjectArray< btTypedConstraint * > m_constraints
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btCollisionObject can be used to manage collision detection objects.
void setupDeformableSolve(bool implicit)
The btRigidBody is the main class for rigid body objects.
#define DISABLE_DEACTIVATION
btAlignedObjectArray< btRigidBody * > m_nonStaticRigidBodies
btInternalTickCallback m_internalTickCallback
virtual void calculateSimulationIslands()
static btMultiBodyLinkCollider * upcast(btCollisionObject *colObj)
virtual btIDebugDraw * getDebugDrawer()
void solveConstraints(btScalar timeStep)
void processDeltaVeeMultiDof2()
void setValue(const btScalar &_x, const btScalar &_y, const btScalar &_z)
btInternalTickCallback m_internalPreTickCallback
btAlignedObjectArray< btTypedConstraint * > m_sortedConstraints
btAlignedObjectArray< DeformableFaceNodeContact > m_faceNodeContacts
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void defaultCollisionHandler(const btCollisionObjectWrapper *pcoWrap)
btVector3 getPushVelocity() const
bool gDisableDeactivation
bool internalNeedsJointFeedback() const
The btDispatcher interface class can be used in combination with broadphase to dispatch calculations ...
btSimulationIslandManager * m_islandManager
btAlignedObjectArray< btScalar > m_jacobians
virtual void clearMultiBodyConstraintForces()
void quickSort(const L &CompareFunc)
void buildIslands(btDispatcher *dispatcher, btCollisionWorld *colWorld)
btScalar Evaluate(const btVector3 &x, const btCollisionShape *shape, btVector3 &normal, btScalar margin)
btDispatcher * m_dispatcher
static btMatrix3x3 OuterProduct(const btScalar *v1, const btScalar *v2, const btScalar *v3, const btScalar *u1, const btScalar *u2, const btScalar *u3, int ndof)
static const btSoftBody * upcast(const btCollisionObject *colObj)
void positionCorrection(btScalar timeStep)
virtual int getDebugMode() const =0
void integrateVelocities(btScalar step)
btContactSolverInfo & getSolverInfo()
virtual void removeCollisionObject(btCollisionObject *collisionObject)
removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise ca...
virtual void debugDrawWorld()
int getActivationState() const
class btIDebugDraw * m_debugDraw
btVector3 btCross(const btVector3 &v1, const btVector3 &v2)
Return the cross product of two vectors.
void processIslands(btDispatcher *dispatcher, btCollisionWorld *collisionWorld, IslandCallback *callback)
btQuaternion inverse(const btQuaternion &q)
Return the inverse of a quaternion.
void softBodySelfCollision()
void reinitialize(const btAlignedObjectArray< btSoftBody * > &softBodies, btScalar dt)
static void DrawFrame(btSoftBody *psb, btIDebugDraw *idraw)
static btMatrix3x3 Diagonal(btScalar x)
bool isUsingRK4Integration() const
virtual void processConstraints(int islandId=-1)
void setLineSearch(bool lineSearch)
btVector3 getTurnVelocity() const
virtual void performDiscreteCollisionDetection()
void reinitialize(btScalar timeStep)
virtual void clearForces()
the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
btSoftBodyArray m_softBodies
const btScalar & getX() const
Return the x value.
btAlignedObjectArray< btScalar > m_scratch_r
virtual void setup(btContactSolverInfo *solverInfo, btTypedConstraint **sortedConstraints, int numConstraints, btMultiBodyConstraint **sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw *debugDrawer)
virtual void addSoftBody(btSoftBody *body, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
btTransform & getWorldTransform()
void removeForce(btSoftBody *psb, btDeformableLagrangianForce *force)
The btCollisionShape class provides an interface for collision shapes that can be shared among btColl...
const btCollisionObject * m_colObj
void beforeSolverCallbacks(btScalar timeStep)
btSoftBodyWorldInfo * m_worldInfo
void addLinkForce(int i, const btVector3 &f)
btCollisionWorld * getCollisionWorld()
The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
btMultiBodyJacobianData jacobianData_normal
virtual void debugDrawWorld()
virtual void integrateTransforms(btScalar timeStep)
btAlignedObjectArray< btMultiBody * > m_multiBodies
btSoftBodyWorldInfo * getWorldInfo()
void resize(int newsize, const T &fillData=T())
virtual int stepSimulation(btScalar timeStep, int maxSubSteps=1, btScalar fixedTimeStep=btScalar(1.)/btScalar(60.))
if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's
void performDeformableCollisionDetection()
virtual void internalSingleStepSimulation(btScalar timeStep)
void setSoftBodySolver(btSoftBodySolver *softBodySolver)
virtual void saveKinematicState(btScalar timeStep)
void addBaseForce(const btVector3 &f)
void setConstraints(const btContactSolverInfo &infoGlobal)
void setWorldTransform(const btTransform &worldTrans)
The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with...
btScalar getBaseMass() const
virtual void allSolved(const btContactSolverInfo &, class btIDebugDraw *)
void removeAtIndex(int index)
btMatrix3x3 transpose() const
Return the transpose of the matrix.
static void findJacobian(const btMultiBodyLinkCollider *multibodyLinkCol, btMultiBodyJacobianData &jacobianData, const btVector3 &contact_point, const btVector3 &dir)
btSoftBody implementation by Nathanael Presson
void Initialize(int hashsize=2383, int clampCells=256 *1024)
void applyRepulsionForce(btScalar timeStep)
virtual void predictUnconstraintMotion(btScalar timeStep)
btScalar m_maxDisplacement
void addForce(btSoftBody *psb, btDeformableLagrangianForce *force)
static btVector3 generateUnitOrthogonalVector(const btVector3 &u)
virtual ~btDeformableMultiBodyDynamicsWorld()
const btMultibodyLink & getLink(int index) const
btDeformableBodySolver * m_deformableBodySolver
Solver classes that encapsulate multiple deformable bodies for solving.
btVector3 can be used to represent 3D points and vectors.
btAlignedObjectArray< btMultiBodyConstraint * > m_sortedMultiBodyConstraints
void afterSolverCallbacks(btScalar timeStep)
void performGeometricCollisions(btScalar timeStep)
btSolverCallback m_solverCallback
btSoftBodyWorldInfo m_sbi
btAlignedObjectArray< btVector3 > m_scratch_v
void updateActions(btScalar timeStep)
bool btFuzzyZero(btScalar x)
class btMultiBodyLinkCollider * m_collider
const btScalar & getZ() const
Return the z value.
btContactSolverInfo m_solverInfo
virtual void applyGravity()
apply gravity, call this once per timestep
const btScalar & getY() const
Return the y value.
btScalar getLinkMass(int i) const
void solveContactConstraints()
void removeSoftBodyForce(btSoftBody *psb)
void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt, btAlignedObjectArray< btScalar > &scratch_r, btAlignedObjectArray< btVector3 > &scratch_v, btAlignedObjectArray< btMatrix3x3 > &scratch_m, bool isConstraintPass, bool jointFeedbackInWorldSpace, bool jointFeedbackInJointFrame)
bool m_latencyMotionStateInterpolation
btAlignedObjectArray< btMatrix3x3 > m_scratch_m
virtual void removeCollisionObject(btCollisionObject *collisionObject)
The btSoftBody is an class to simulate cloth and volumetric soft bodies.
virtual void predictMotion(btScalar solverdt)
Predict motion of soft bodies into next timestep.
void setDefaultVoxelsz(btScalar sz)
The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
void removeSoftBody(btSoftBody *body)
virtual void synchronizeMotionStates()
virtual void integrateTransforms(btScalar timeStep)
void setPushVelocity(const btVector3 &v)
int getInternalType() const
reserved for Bullet internal usage
btConstraintSolver * m_constraintSolver
btAlignedObjectArray< btMultiBodyConstraint * > m_multiBodyConstraints
void removeCollisionObject(btCollisionObject *collisionObject)
removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise ca...
virtual int getNumConstraints() const
void applyRigidBodyGravity(btScalar timeStep)
#define WANTS_DEACTIVATION
btMultiBody * m_multiBody
static void Draw(btSoftBody *psb, btIDebugDraw *idraw, int drawflags=fDrawFlags::Std)
btAlignedObjectArray< DeformableNodeRigidAnchor > m_deformableAnchors
btDispatcher * getDispatcher()
btMultiBodyJacobianData jacobianData_t1
void applyRepulsionForce(btScalar timeStep, bool applySpringForce)
btSoftBodyArray & getSoftBodyArray()
DeformableBodyInplaceSolverIslandCallback * m_solverDeformableBodyIslandCallback
The btMultiBodyDynamicsWorld adds Featherstone multi body dynamics to Bullet This implementation is s...
void setTurnVelocity(const btVector3 &v)
virtual void addCollisionObject(btCollisionObject *collisionObject, int collisionFilterGroup=btBroadphaseProxy::DefaultFilter, int collisionFilterMask=btBroadphaseProxy::AllFilter)
virtual void updateActivationState(btScalar timeStep)
void push_back(const T &_Val)
btBroadphaseInterface * m_broadphase
void interpolateRenderMesh()
btSparseSdf< 3 > m_sparsesdf
btCollisionConfiguration allows to configure Bullet collision detection stack allocator size,...
btDeformableBackwardEulerObjective * m_objective
void remove(const T &key)
virtual void solveDeformableConstraints(btScalar solverdt)
btDeformableMultiBodyDynamicsWorld(btDispatcher *dispatcher, btBroadphaseInterface *pairCache, btDeformableMultiBodyConstraintSolver *constraintSolver, btCollisionConfiguration *collisionConfiguration, btDeformableBodySolver *deformableBodySolver=0)
void setImplicit(bool implicit)
const btMultiBodyLinkCollider * getBaseCollider() const
btDispatcherInfo & getDispatchInfo()
btAlignedObjectArray< btScalar > m_deltaVelocitiesUnitImpulse
void updateActivationState(btScalar timeStep)
virtual void predictUnconstraintMotion(btScalar timeStep)
void setActivationState(int newState) const
int size() const
return the number of elements in the array
void startProfiling(btScalar timeStep)
const btCollisionShape * getCollisionShape() const