diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-02-20 12:55:00 +0100 |
|---|---|---|
| committer | Sébastien Crozet <sebastien@crozet.re> | 2022-03-20 21:49:16 +0100 |
| commit | fb20d72ee29de9311a81aec6eb9f02fd2aa35fc4 (patch) | |
| tree | 45827ac4c754c3670d1ddb2f91fc498515d6b3b8 /src/dynamics/solver/velocity_constraint_wide.rs | |
| parent | e740493b980dc9856864ead3206a4fa02aff965f (diff) | |
| download | rapier-fb20d72ee29de9311a81aec6eb9f02fd2aa35fc4.tar.gz rapier-fb20d72ee29de9311a81aec6eb9f02fd2aa35fc4.tar.bz2 rapier-fb20d72ee29de9311a81aec6eb9f02fd2aa35fc4.zip | |
Joint API and joint motors improvements
Diffstat (limited to 'src/dynamics/solver/velocity_constraint_wide.rs')
| -rw-r--r-- | src/dynamics/solver/velocity_constraint_wide.rs | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/src/dynamics/solver/velocity_constraint_wide.rs b/src/dynamics/solver/velocity_constraint_wide.rs index 44b91c6..dbcc433 100644 --- a/src/dynamics/solver/velocity_constraint_wide.rs +++ b/src/dynamics/solver/velocity_constraint_wide.rs @@ -9,7 +9,7 @@ use crate::math::{ }; #[cfg(feature = "dim2")] use crate::utils::WBasis; -use crate::utils::{WAngularInertia, WCross, WDot}; +use crate::utils::{self, WAngularInertia, WCross, WDot}; use num::Zero; use simba::simd::{SimdPartialOrd, SimdValue}; @@ -47,7 +47,6 @@ impl WVelocityConstraint { } let inv_dt = SimdReal::splat(params.inv_dt()); - let velocity_solve_fraction = SimdReal::splat(params.velocity_solve_fraction); let allowed_lin_err = SimdReal::splat(params.allowed_linear_error); let erp_inv_dt = SimdReal::splat(params.erp_inv_dt()); @@ -135,16 +134,17 @@ impl WVelocityConstraint { let gcross2 = ii2.transform_vector(dp2.gcross(-force_dir1)); let imsum = im1 + im2; - let projected_mass = SimdReal::splat(1.0) - / (force_dir1.dot(&imsum.component_mul(&force_dir1)) + let projected_mass = utils::simd_inv( + force_dir1.dot(&imsum.component_mul(&force_dir1)) + gcross1.gdot(gcross1) - + gcross2.gdot(gcross2)); + + gcross2.gdot(gcross2), + ); let projected_velocity = (vel1 - vel2).dot(&force_dir1); let mut rhs_wo_bias = (SimdReal::splat(1.0) + is_bouncy * restitution) * projected_velocity; rhs_wo_bias += dist.simd_max(SimdReal::zero()) * inv_dt; - rhs_wo_bias *= is_bouncy + is_resting * velocity_solve_fraction; + rhs_wo_bias *= is_bouncy + is_resting; let rhs_bias = (dist + allowed_lin_err).simd_min(SimdReal::zero()) * (erp_inv_dt/* * is_resting */); @@ -174,7 +174,7 @@ impl WVelocityConstraint { constraint.elements[k].tangent_part.gcross2[j] = gcross2; constraint.elements[k].tangent_part.rhs[j] = rhs; constraint.elements[k].tangent_part.r[j] = if cfg!(feature = "dim2") { - SimdReal::splat(1.0) / r + utils::simd_inv(r) } else { r }; |
