Bullet Collision Detection & Physics Library
|
Go to the documentation of this file.
45 m_deformableBodySolver(deformableBodySolver), m_solverCallback(0)
74 (*m_internalPreTickCallback)(
this, timeStep);
160 if (pushVelocity[0] != 0.f || pushVelocity[1] != 0 || pushVelocity[2] != 0 || turnVelocity[0] != 0.f || turnVelocity[1] != 0 || turnVelocity[2] != 0)
182 btScalar clampDeltaV = maxDisplacement / timeStep;
183 for (
int c = 0; c < 3; c++)
185 if (node.
m_v[c] > clampDeltaV)
187 node.
m_v[c] = clampDeltaV;
189 if (node.
m_v[c] < -clampDeltaV)
191 node.
m_v[c] = -clampDeltaV;
194 node.
m_x = node.
m_x + timeStep * node.
m_v;
211 if (multibodyLinkCol)
332 bool isSleeping =
false;
357 bool isConstraintPass =
true;
384 collisionFilterGroup,
385 collisionFilterMask);
448 bool isSleeping =
false;
465 bool isConstraintPass =
false;
476 btAssert(
" RK4Integration is not supported" );
503 bool isSleeping =
false;
531 (*m_internalTickCallback)(
this, timeStep);
552 for (
int i = 0; i < forces.
size(); ++i)
556 forces[i]->addSoftBody(psb);
591 int numSimulationSubSteps = 0;
600 numSimulationSubSteps = int(
m_localTime / fixedTimeStep);
601 m_localTime -= numSimulationSubSteps * fixedTimeStep;
607 fixedTimeStep = timeStep;
612 numSimulationSubSteps = 0;
617 numSimulationSubSteps = 1;
628 if (numSimulationSubSteps)
631 int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps) ? maxSubSteps : numSimulationSubSteps;
635 for (
int i = 0; i < clampedSimulationSteps; i++)
648 #ifndef BT_NO_PROFILE
649 CProfileManager::Increment_Frame_Counter();
650 #endif //BT_NO_PROFILE
652 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 void updateSoftBodies()
Perform necessary per-step updates of soft bodies such as recomputing normals and bounding boxes.
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
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
void defaultCollisionHandler(const btCollisionObjectWrapper *pcoWrap)
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)
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()
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
virtual void internalSingleStepSimulation(btScalar timeStep)
void setSoftBodySolver(btSoftBodySolver *softBodySolver)
virtual void saveKinematicState(btScalar timeStep)
void addBaseForce(const btVector3 &f)
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 *)
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)
virtual void predictUnconstraintMotion(btScalar timeStep)
btScalar m_maxDisplacement
void addForce(btSoftBody *psb, btDeformableLagrangianForce *force)
static btVector3 generateUnitOrthogonalVector(const btVector3 &u)
const btMultibodyLink & getLink(int index) const
btDeformableBodySolver * m_deformableBodySolver
Solver classes that encapsulate multiple deformable bodies for solving.
btVector3 getTurnVelocity()
btVector3 can be used to represent 3D points and vectors.
btAlignedObjectArray< btMultiBodyConstraint * > m_sortedMultiBodyConstraints
void afterSolverCallbacks(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 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
btVector3 getPushVelocity()
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
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