Jolt Physics
A multi core friendly Game Physics Engine
|
The Body class only keeps track of state for static bodies, the MotionProperties class keeps the additional state needed for a moving Body. It has a 1-on-1 relationship with the body. More...
#include <MotionProperties.h>
Public Member Functions | |
JPH_OVERRIDE_NEW_DELETE EMotionQuality | GetMotionQuality () const |
Motion quality, or how well it detects collisions when it has a high velocity. | |
EAllowedDOFs | GetAllowedDOFs () const |
Get the allowed degrees of freedom that this body has (this can be changed by calling SetMassProperties) | |
bool | GetAllowSleeping () const |
If this body can go to sleep. | |
Vec3 | GetLinearVelocity () const |
Get world space linear velocity of the center of mass. | |
void | SetLinearVelocity (Vec3Arg inLinearVelocity) |
Set world space linear velocity of the center of mass. | |
void | SetLinearVelocityClamped (Vec3Arg inLinearVelocity) |
Set world space linear velocity of the center of mass, will make sure the value is clamped against the maximum linear velocity. | |
Vec3 | GetAngularVelocity () const |
Get world space angular velocity of the center of mass. | |
void | SetAngularVelocity (Vec3Arg inAngularVelocity) |
Set world space angular velocity of the center of mass. | |
void | SetAngularVelocityClamped (Vec3Arg inAngularVelocity) |
Set world space angular velocity of the center of mass, will make sure the value is clamped against the maximum angular velocity. | |
void | MoveKinematic (Vec3Arg inDeltaPosition, QuatArg inDeltaRotation, float inDeltaTime) |
Set velocity of body such that it will be rotate/translate by inDeltaPosition/Rotation in inDeltaTime seconds. | |
void | ClampLinearVelocity () |
Clamp velocity according to limit. | |
void | ClampAngularVelocity () |
float | GetLinearDamping () const |
Get linear damping: dv/dt = -c * v. c must be between 0 and 1 but is usually close to 0. | |
void | SetLinearDamping (float inLinearDamping) |
float | GetAngularDamping () const |
Get angular damping: dw/dt = -c * w. c must be between 0 and 1 but is usually close to 0. | |
void | SetAngularDamping (float inAngularDamping) |
float | GetGravityFactor () const |
Get gravity factor (1 = normal gravity, 0 = no gravity) | |
void | SetGravityFactor (float inGravityFactor) |
void | SetMassProperties (EAllowedDOFs inAllowedDOFs, const MassProperties &inMassProperties) |
Set the mass and inertia tensor. | |
float | GetInverseMass () const |
Get inverse mass (1 / mass). Should only be called on a dynamic object (static or kinematic bodies have infinite mass so should be treated as 1 / mass = 0) | |
float | GetInverseMassUnchecked () const |
void | SetInverseMass (float inInverseMass) |
Vec3 | GetInverseInertiaDiagonal () const |
Diagonal of inverse inertia matrix: D. Should only be called on a dynamic object (static or kinematic bodies have infinite mass so should be treated as D = 0) | |
Quat | GetInertiaRotation () const |
Rotation (R) that takes inverse inertia diagonal to local space: \(I_{body}^{-1} = R \: D \: R^{-1}\). | |
void | SetInverseInertia (Vec3Arg inDiagonal, QuatArg inRot) |
Mat44 | GetLocalSpaceInverseInertia () const |
Get inverse inertia matrix ( \(I_{body}^{-1}\)). Will be a matrix of zeros for a static or kinematic object. | |
Mat44 | GetLocalSpaceInverseInertiaUnchecked () const |
Same as GetLocalSpaceInverseInertia() but doesn't check if the body is dynamic. | |
Mat44 | GetInverseInertiaForRotation (Mat44Arg inRotation) const |
Get inverse inertia matrix ( \(I^{-1}\)) for a given object rotation (translation will be ignored). Zero if object is static or kinematic. | |
JPH_INLINE Vec3 | MultiplyWorldSpaceInverseInertiaByVector (QuatArg inBodyRotation, Vec3Arg inV) const |
Multiply a vector with the inverse world space inertia tensor ( \(I_{world}^{-1}\)). Zero if object is static or kinematic. | |
JPH_INLINE Vec3 | GetPointVelocityCOM (Vec3Arg inPointRelativeToCOM) const |
Velocity of point inPoint (in center of mass space, e.g. on the surface of the body) of the body (unit: m/s) | |
JPH_INLINE Vec3 | GetAccumulatedForce () const |
JPH_INLINE Vec3 | GetAccumulatedTorque () const |
JPH_INLINE void | ResetForce () |
JPH_INLINE void | ResetTorque () |
JPH_INLINE Vec3 | LockTranslation (Vec3Arg inV) |
Takes a translation vector inV and returns a vector where the components that are not allowed by mAllowedDOFs are set to 0. | |
void | ApplyForceTorqueAndDragInternal (QuatArg inBodyRotation, Vec3Arg inGravity, float inDeltaTime) |
Apply all accumulated forces, torques and drag (should only be called by the PhysicsSystem) | |
uint32 | GetIslandIndexInternal () const |
Access to the island index. | |
void | SetIslandIndexInternal (uint32 inIndex) |
uint32 | GetIndexInActiveBodiesInternal () const |
Access to the index in the active bodies array. | |
void | ResetSleepTestSpheres (const RVec3 *inPoints) |
Reset spheres to center around inPoints with radius 0. | |
void | ResetSleepTestTimer () |
Reset the sleep test timer without resetting the sleep test spheres. | |
ECanSleep | AccumulateSleepTime (float inDeltaTime, float inTimeBeforeSleep) |
Accumulate sleep time and return if a body can go to sleep. | |
void | SaveState (StateRecorder &inStream) const |
Saving state for replay. | |
void | RestoreState (StateRecorder &inStream) |
Restoring state for replay. | |
Velocity limits | |
float | GetMaxLinearVelocity () const |
Maximum linear velocity that a body can achieve. Used to prevent the system from exploding. | |
void | SetMaxLinearVelocity (float inLinearVelocity) |
float | GetMaxAngularVelocity () const |
Maximum angular velocity that a body can achieve. Used to prevent the system from exploding. | |
void | SetMaxAngularVelocity (float inAngularVelocity) |
Update linear and angular velocity (used during constraint solving) | |
void | AddLinearVelocityStep (Vec3Arg inLinearVelocityChange) |
void | SubLinearVelocityStep (Vec3Arg inLinearVelocityChange) |
void | AddAngularVelocityStep (Vec3Arg inAngularVelocityChange) |
void | SubAngularVelocityStep (Vec3Arg inAngularVelocityChange) |
Static Public Attributes | |
static constexpr uint32 | cInactiveIndex = uint32(-1) |
Constant indicating that body is not active. | |
Friends | |
class | BodyManager |
class | Body |
The Body class only keeps track of state for static bodies, the MotionProperties class keeps the additional state needed for a moving Body. It has a 1-on-1 relationship with the body.
|
inline |
Accumulate sleep time and return if a body can go to sleep.
|
inline |
|
inline |
|
inline |
Apply all accumulated forces, torques and drag (should only be called by the PhysicsSystem)
|
inline |
|
inline |
Clamp velocity according to limit.
|
inline |
|
inline |
|
inline |
Get the allowed degrees of freedom that this body has (this can be changed by calling SetMassProperties)
|
inline |
If this body can go to sleep.
|
inline |
Get angular damping: dw/dt = -c * w. c must be between 0 and 1 but is usually close to 0.
|
inline |
Get world space angular velocity of the center of mass.
|
inline |
Get gravity factor (1 = normal gravity, 0 = no gravity)
|
inline |
Access to the index in the active bodies array.
|
inline |
Rotation (R) that takes inverse inertia diagonal to local space: \(I_{body}^{-1} = R \: D \: R^{-1}\).
|
inline |
Diagonal of inverse inertia matrix: D. Should only be called on a dynamic object (static or kinematic bodies have infinite mass so should be treated as D = 0)
Get inverse inertia matrix ( \(I^{-1}\)) for a given object rotation (translation will be ignored). Zero if object is static or kinematic.
|
inline |
Get inverse mass (1 / mass). Should only be called on a dynamic object (static or kinematic bodies have infinite mass so should be treated as 1 / mass = 0)
|
inline |
|
inline |
Access to the island index.
|
inline |
Get linear damping: dv/dt = -c * v. c must be between 0 and 1 but is usually close to 0.
|
inline |
Get world space linear velocity of the center of mass.
|
inline |
Get inverse inertia matrix ( \(I_{body}^{-1}\)). Will be a matrix of zeros for a static or kinematic object.
|
inline |
Same as GetLocalSpaceInverseInertia() but doesn't check if the body is dynamic.
|
inline |
Maximum angular velocity that a body can achieve. Used to prevent the system from exploding.
|
inline |
Maximum linear velocity that a body can achieve. Used to prevent the system from exploding.
|
inline |
Motion quality, or how well it detects collisions when it has a high velocity.
Velocity of point inPoint (in center of mass space, e.g. on the surface of the body) of the body (unit: m/s)
Takes a translation vector inV and returns a vector where the components that are not allowed by mAllowedDOFs are set to 0.
|
inline |
Set velocity of body such that it will be rotate/translate by inDeltaPosition/Rotation in inDeltaTime seconds.
Vec3 MotionProperties::MultiplyWorldSpaceInverseInertiaByVector | ( | QuatArg | inBodyRotation, |
Vec3Arg | inV ) const |
Multiply a vector with the inverse world space inertia tensor ( \(I_{world}^{-1}\)). Zero if object is static or kinematic.
|
inline |
|
inline |
Reset spheres to center around inPoints with radius 0.
|
inline |
Reset the sleep test timer without resetting the sleep test spheres.
|
inline |
void MotionProperties::RestoreState | ( | StateRecorder & | inStream | ) |
Restoring state for replay.
void MotionProperties::SaveState | ( | StateRecorder & | inStream | ) | const |
Saving state for replay.
|
inline |
|
inline |
Set world space angular velocity of the center of mass.
|
inline |
Set world space angular velocity of the center of mass, will make sure the value is clamped against the maximum angular velocity.
|
inline |
Set the inverse inertia tensor in local space by setting the diagonal and the rotation: \(I_{body}^{-1} = R \: D \: R^{-1}\). Note that mass and inertia are linearly related (e.g. inertia of a sphere with mass m and radius r is \(2/5 \: m \: r^2\)). If you change inertia, mass should probably change as well. See MassProperties::ScaleToMass. If you don't allow all rotational degrees of freedom, make sure that the corresponding diagonal elements are zero (see EAllowedDOFs).
|
inline |
Set the inverse mass (1 / mass). Note that mass and inertia are linearly related (e.g. inertia of a sphere with mass m and radius r is \(2/5 \: m \: r^2\)). If you change mass, inertia should probably change as well. See MassProperties::ScaleToMass. If all your translation degrees of freedom are restricted, make sure this is zero (see EAllowedDOFs).
|
inline |
|
inline |
|
inline |
Set world space linear velocity of the center of mass.
|
inline |
Set world space linear velocity of the center of mass, will make sure the value is clamped against the maximum linear velocity.
JPH_NAMESPACE_BEGIN void MotionProperties::SetMassProperties | ( | EAllowedDOFs | inAllowedDOFs, |
const MassProperties & | inMassProperties ) |
Set the mass and inertia tensor.
|
inline |
|
inline |
|
inline |
|
inline |
|
friend |
|
friend |
Constant indicating that body is not active.