public static void Prestep(ref Vector3Wide tangentX, ref Vector3Wide tangentY, ref Vector3Wide offsetA, ref BodyInertias inertiaA, out Projection projection) { ComputeJacobians(ref tangentX, ref tangentY, ref offsetA, out var jacobians); //Compute effective mass matrix contributions. Symmetric2x2Wide.SandwichScale(jacobians.LinearA, inertiaA.InverseMass, out var linearContributionA); Symmetric3x3Wide.MatrixSandwich(jacobians.AngularA, inertiaA.InverseInertiaTensor, out var angularContributionA); //No softening; this constraint is rigid by design. (It does support a maximum force, but that is distinct from a proper damping ratio/natural frequency.) Symmetric2x2Wide.Add(linearContributionA, angularContributionA, out var inverseEffectiveMass); Symmetric2x2Wide.InvertWithoutOverlap(inverseEffectiveMass, out projection.EffectiveMass); projection.OffsetA = offsetA; //Note that friction constraints have no bias velocity. They target zero velocity. }
public void Do() { Symmetric3x3Wide.MatrixSandwich(m, triangular, out result); }