aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/velocity_constraint.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-01-09 22:15:36 +0100
committerSébastien Crozet <developer@crozet.re>2022-01-09 22:15:36 +0100
commitb631fe9193a2e769e5ca1c5c8c4ac9843da870ac (patch)
tree8682f0870149b8ef6f741dccf0a96e2a26966c8c /src/dynamics/solver/velocity_constraint.rs
parent2bfceadf0672572a360af33cf4a78cb42488e684 (diff)
downloadrapier-b631fe9193a2e769e5ca1c5c8c4ac9843da870ac.tar.gz
rapier-b631fe9193a2e769e5ca1c5c8c4ac9843da870ac.tar.bz2
rapier-b631fe9193a2e769e5ca1c5c8c4ac9843da870ac.zip
Allow locking individual translational axes
Diffstat (limited to 'src/dynamics/solver/velocity_constraint.rs')
-rw-r--r--src/dynamics/solver/velocity_constraint.rs16
1 files changed, 8 insertions, 8 deletions
diff --git a/src/dynamics/solver/velocity_constraint.rs b/src/dynamics/solver/velocity_constraint.rs
index 719468d..0a841b8 100644
--- a/src/dynamics/solver/velocity_constraint.rs
+++ b/src/dynamics/solver/velocity_constraint.rs
@@ -94,8 +94,8 @@ pub(crate) struct VelocityConstraint {
pub dir1: Vector<Real>, // Non-penetration force direction for the first body.
#[cfg(feature = "dim3")]
pub tangent1: Vector<Real>, // One of the friction force directions.
- pub im1: Real,
- pub im2: Real,
+ pub im1: Vector<Real>,
+ pub im2: Vector<Real>,
pub limit: Real,
pub mj_lambda1: usize,
pub mj_lambda2: usize,
@@ -235,9 +235,9 @@ impl VelocityConstraint {
.effective_world_inv_inertia_sqrt
.transform_vector(dp2.gcross(-force_dir1));
+ let imsum = mprops1.effective_inv_mass + mprops2.effective_inv_mass;
let r = 1.0
- / (mprops1.effective_inv_mass
- + mprops2.effective_inv_mass
+ / (force_dir1.dot(&imsum.component_mul(&force_dir1))
+ gcross1.gdot(gcross1)
+ gcross2.gdot(gcross2));
@@ -274,9 +274,9 @@ impl VelocityConstraint {
let gcross2 = mprops2
.effective_world_inv_inertia_sqrt
.transform_vector(dp2.gcross(-tangents1[j]));
+ let imsum = mprops1.effective_inv_mass + mprops2.effective_inv_mass;
let r = 1.0
- / (mprops1.effective_inv_mass
- + mprops2.effective_inv_mass
+ / (tangents1[j].dot(&imsum.component_mul(&tangents1[j]))
+ gcross1.gdot(gcross1)
+ gcross2.gdot(gcross2));
let rhs =
@@ -314,8 +314,8 @@ impl VelocityConstraint {
&self.dir1,
#[cfg(feature = "dim3")]
&self.tangent1,
- self.im1,
- self.im2,
+ &self.im1,
+ &self.im2,
self.limit,
&mut mj_lambda1,
&mut mj_lambda2,