12template <EMotionType Type1>
63template <EMotionType Type2>
85template <EMotionType Type1, EMotionType Type2>
90 JPH_INLINE
bool ApplyVelocityStep(
Vec3 &ioLinearVelocity1,
Vec3 &ioAngularVelocity1,
Vec3 &ioLinearVelocity2,
Vec3 &ioAngularVelocity2,
float inInvMass1,
float inInvMass2,
Vec3Arg inWorldSpaceAxis,
float inLambda)
const
96 ioLinearVelocity1 -= (inLambda * inInvMass1) * inWorldSpaceAxis;
101 ioLinearVelocity2 += (inLambda * inInvMass2) * inWorldSpaceAxis;
120 float inv_effective_mass;
124 Vec3 r1_plus_u_x_axis = inR1PlusU.
Cross(inWorldSpaceAxis);
125 r1_plus_u_x_axis.
StoreFloat3(&this->mR1PlusUxAxis);
130 invi1_r1_plus_u_x_axis.
StoreFloat3(&this->mInvI1_R1PlusUxAxis);
132 inv_effective_mass = inInvMass1 + invi1_r1_plus_u_x_axis.
Dot(r1_plus_u_x_axis);
135 inv_effective_mass = 0.0f;
138 inv_effective_mass = 0.0f;
142 Vec3 r2_x_axis = inR2.
Cross(inWorldSpaceAxis);
148 invi2_r2_x_axis.
StoreFloat3(&this->mInvI2_R2xAxis);
150 inv_effective_mass += inInvMass2 + invi2_r2_x_axis.
Dot(r2_x_axis);
154 if (inv_effective_mass == 0.0f)
161 JPH_INLINE
bool WarmStart(
Vec3 &ioLinearVelocity1,
Vec3 &ioAngularVelocity1,
Vec3 &ioLinearVelocity2,
Vec3 &ioAngularVelocity2,
float inInvMass1,
float inInvMass2,
Vec3Arg inWorldSpaceAxis,
float inWarmStartImpulseRatio)
165 return ApplyVelocityStep(ioLinearVelocity1, ioAngularVelocity1, ioLinearVelocity2, ioAngularVelocity2, inInvMass1, inInvMass2, inWorldSpaceAxis, this->
mTotalLambda);
174 jv = inWorldSpaceAxis.
Dot(inLinearVelocity1 - inLinearVelocity2);
176 jv = inWorldSpaceAxis.
Dot(inLinearVelocity1);
178 jv = inWorldSpaceAxis.
Dot(-inLinearVelocity2);
200 float delta_lambda = inTotalLambda - this->
mTotalLambda;
201 this->mTotalLambda = inTotalLambda;
203 return ApplyVelocityStep(ioLinearVelocity1, ioAngularVelocity1, ioLinearVelocity2, ioAngularVelocity2, inInvMass1, inInvMass2, inWorldSpaceAxis, delta_lambda);
207 JPH_INLINE
bool SolveVelocityConstraint(
Vec3 &ioLinearVelocity1,
Vec3 &ioAngularVelocity1,
Vec3 &ioLinearVelocity2,
Vec3 &ioAngularVelocity2,
float inInvMass1,
float inInvMass2,
Vec3Arg inWorldSpaceAxis,
float inMinLambda,
float inMaxLambda)
212 total_lambda =
Clamp(total_lambda, inMinLambda, inMaxLambda);
214 return SolveVelocityConstraintApplyLambda(ioLinearVelocity1, ioAngularVelocity1, ioLinearVelocity2, ioAngularVelocity2, inInvMass1, inInvMass2, inWorldSpaceAxis, total_lambda);
#define JPH_NAMESPACE_END
Definition Core.h:434
#define JPH_NAMESPACE_BEGIN
Definition Core.h:428
#define JPH_ASSERT(...)
Definition IssueReporting.h:33
JPH_INLINE constexpr T Clamp(T inV, T inMin, T inMax)
Clamp a value between two values.
Definition Math.h:63
EMotionType
Motion type of a physics body.
Definition MotionType.h:11
@ Kinematic
Movable using velocities only, does not respond to forces.
@ Dynamic
Responds to forces as a normal physics object.
void AddRotationStep(Vec3Arg inAngularVelocityTimesDeltaTime)
Update rotation using an Euler step (used during position integrate & constraint solving)
Definition Body.inl:81
void SubPositionStep(Vec3Arg inLinearVelocityTimesDeltaTime)
Definition Body.h:349
void SubRotationStep(Vec3Arg inAngularVelocityTimesDeltaTime)
Definition Body.inl:100
void AddPositionStep(Vec3Arg inLinearVelocityTimesDeltaTime)
Update position using an Euler step (used during position integrate & constraint solving)
Definition Body.h:348
Class that holds 3 floats. Used as a storage class. Convert to Vec3 for calculations.
Definition Float3.h:13
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
Definition Mat44.h:13
JPH_INLINE Vec3 Multiply3x3(Vec3Arg inV) const
Multiply vector by only 3x3 part of the matrix.
Definition Mat44.inl:384
JPH_INLINE float Dot(Vec3Arg inV2) const
Dot product.
Definition Vec3.inl:931
JPH_INLINE Vec3 Cross(Vec3Arg inV2) const
Cross product.
Definition Vec3.inl:855
JPH_INLINE bool IsNormalized(float inTolerance=1.0e-6f) const
Test if vector is normalized.
Definition Vec3.inl:1030
JPH_INLINE void StoreFloat3(Float3 *outV) const
Store 3 floats to memory.
Definition Vec3.inl:1055
static JPH_INLINE Vec3 sLoadFloat3Unsafe(const Float3 &inV)
Load 3 floats from memory (reads 32 bits extra which it doesn't use)
Definition Vec3.inl:167