|
RavEngine
|
A one-dimensional constraint. More...
#include <PxConstraintDesc.h>
Public Attributes | ||
| PxVec3 | linear0 | |
| linear component of velocity jacobian in world space | ||
| PxReal | geometricError | |
| geometric error of the constraint along this axis | ||
| PxVec3 | angular0 | |
| angular component of velocity jacobian in world space | ||
| PxReal | velocityTarget | |
| velocity target for the constraint along this axis | ||
| PxVec3 | linear1 | |
| linear component of velocity jacobian in world space | ||
| PxReal | minImpulse | |
| minimum impulse the solver may apply to enforce this constraint | ||
| PxVec3 | angular1 | |
| angular component of velocity jacobian in world space | ||
| PxReal | maxImpulse | |
| maximum impulse the solver may apply to enforce this constraint | ||
| union { | ||
| struct SpringModifiers { | ||
| PxReal stiffness | ||
| spring parameter, for spring constraints | ||
| PxReal damping | ||
| damping parameter, for spring constraints | ||
| } spring | ||
| struct RestitutionModifiers { | ||
| PxReal restitution | ||
| restitution parameter for determining additional "bounce" | ||
| PxReal velocityThreshold | ||
| minimum impact velocity for bounce | ||
| } bounce | ||
| } | mods | |
| PxReal | forInternalUse | |
| for internal use only | ||
| PxU16 | flags | |
| a set of Px1DConstraintFlags | ||
| PxU16 | solveHint | |
| constraint optimization hint, should be an element of PxConstraintSolveHint | ||
A one-dimensional constraint.
A constraint is expressed as a set of 1-dimensional constraint rows which define the required constraint on the objects' velocities.
Each constraint is either a hard constraint or a spring. We define the velocity at the constraint to be the quantity
v = body0vel.dot(lin0,ang0) - body1vel.dot(lin1, ang1)
For a hard constraint, the solver attempts to generate
a set of velocities for the objects which, when integrated, respect the constraint errors:
v + (geometricError / timestep) = velocityTarget
a set of velocities for the objects which respect the constraints:
v = velocityTarget
Hard constraints support restitution: if the impact velocity exceeds the bounce threshold, then the target velocity of the constraint will be set to restitution * -v
Alternatively, the solver can attempt to resolve the velocity constraint as an implicit spring:
F = stiffness * -geometricError + damping * (velocityTarget - v)
where F is the constraint force or acceleration. Springs are fully implicit: that is, the force or acceleration is a function of the position and velocity after the solve.
All constraints support limits on the minimum or maximum impulse applied.