aboutsummaryrefslogtreecommitdiff
path: root/src/dynamics/solver/velocity_constraint_wide.rs
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-02-20 12:55:00 +0100
committerSébastien Crozet <sebastien@crozet.re>2022-03-20 21:49:16 +0100
commitfb20d72ee29de9311a81aec6eb9f02fd2aa35fc4 (patch)
tree45827ac4c754c3670d1ddb2f91fc498515d6b3b8 /src/dynamics/solver/velocity_constraint_wide.rs
parente740493b980dc9856864ead3206a4fa02aff965f (diff)
downloadrapier-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.rs14
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
};