Merge pull request #284 from dimforge/damping-fix

Fix the application of damping to bodies part of an active island
This commit is contained in:
Sébastien Crozet
2022-01-28 11:59:39 -08:00
committed by GitHub

View File

@@ -261,17 +261,22 @@ impl VelocitySolver {
multibody.velocities += mj_lambdas; multibody.velocities += mj_lambdas;
} }
} else { } else {
let (ids, mprops): (&RigidBodyIds, &RigidBodyMassProps) = let (ids, damping, mprops): (
bodies.index_bundle(handle.0); &RigidBodyIds,
&RigidBodyDamping,
&RigidBodyMassProps,
) = bodies.index_bundle(handle.0);
let dvel = self.mj_lambdas[ids.active_set_offset]; let dvel = self.mj_lambdas[ids.active_set_offset];
let dangvel = mprops let dangvel = mprops
.effective_world_inv_inertia_sqrt .effective_world_inv_inertia_sqrt
.transform_vector(dvel.angular); .transform_vector(dvel.angular);
let damping = *damping; // To avoid borrow issues.
bodies.map_mut_internal(handle.0, |vels: &mut RigidBodyVelocity| { bodies.map_mut_internal(handle.0, |vels: &mut RigidBodyVelocity| {
vels.linvel += dvel.linear; vels.linvel += dvel.linear;
vels.angvel += dangvel; vels.angvel += dangvel;
*vels = vels.apply_damping(params.dt, &damping);
}); });
} }
} }