feat: switch to the new Bvh from parry for the broad-phase (#853)
* feat: switch to the new Bvh from parry for the broad-phase * chore: cargo fmt + update testbed * chore: remove the multi-grid SAP broad-phase * fix soft-ccd handling in broad-phase * Fix contact cleanup in broad-phase after collider removal * chore: clippy fixes * fix CCD regression * chore: update changelog * fix build with the parallel feature enabled * chore: remove the now useless broad-phase proxy index from colliders * fix tests
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
use crate::dynamics::solver::MotorParameters;
|
||||
use crate::dynamics::{FixedJoint, MotorModel, PrismaticJoint, RevoluteJoint, RopeJoint};
|
||||
use crate::math::{Isometry, Point, Real, Rotation, UnitVector, Vector, SPATIAL_DIM};
|
||||
use crate::math::{Isometry, Point, Real, Rotation, SPATIAL_DIM, UnitVector, Vector};
|
||||
use crate::utils::{SimdBasis, SimdRealCopy};
|
||||
|
||||
#[cfg(feature = "dim3")]
|
||||
|
||||
@@ -3,8 +3,8 @@ use parry::utils::hashset::HashSet;
|
||||
use super::ImpulseJoint;
|
||||
use crate::geometry::{InteractionGraph, RigidBodyGraphIndex, TemporaryInteractionIndex};
|
||||
|
||||
use crate::data::arena::Arena;
|
||||
use crate::data::Coarena;
|
||||
use crate::data::arena::Arena;
|
||||
use crate::dynamics::{GenericJoint, IslandManager, RigidBodyHandle, RigidBodySet};
|
||||
|
||||
/// The unique identifier of a joint added to the joint set.
|
||||
|
||||
@@ -4,13 +4,13 @@ use crate::dynamics::{RigidBodyHandle, RigidBodySet, RigidBodyType, RigidBodyVel
|
||||
#[cfg(feature = "dim3")]
|
||||
use crate::math::Matrix;
|
||||
use crate::math::{
|
||||
AngDim, AngVector, Dim, Isometry, Jacobian, Point, Real, Vector, ANG_DIM, DIM, SPATIAL_DIM,
|
||||
ANG_DIM, AngDim, AngVector, DIM, Dim, Isometry, Jacobian, Point, Real, SPATIAL_DIM, Vector,
|
||||
};
|
||||
use crate::prelude::MultibodyJoint;
|
||||
use crate::utils::{IndexMut2, SimdAngularInertia, SimdCross, SimdCrossMatrix};
|
||||
use na::{
|
||||
self, DMatrix, DVector, DVectorView, DVectorViewMut, Dyn, OMatrix, SMatrix, SVector,
|
||||
StorageMut, LU,
|
||||
self, DMatrix, DVector, DVectorView, DVectorViewMut, Dyn, LU, OMatrix, SMatrix, SVector,
|
||||
StorageMut,
|
||||
};
|
||||
|
||||
#[cfg(doc)]
|
||||
@@ -1083,7 +1083,7 @@ impl Multibody {
|
||||
/// - All the indices must be part of the same kinematic branch.
|
||||
/// - If a link is `branch[i]`, then `branch[i - 1]` must be its parent.
|
||||
///
|
||||
/// In general, this method shouldn’t be used directly and [`Self::forward_kinematics_single_link`̦]
|
||||
/// In general, this method shouldn’t be used directly and [`Self::forward_kinematics_single_link`]
|
||||
/// should be preferred since it computes the branch indices automatically.
|
||||
///
|
||||
/// If you want to calculate the branch indices manually, see [`Self::kinematic_branch`].
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
use crate::dynamics::{JointAxesMask, Multibody, MultibodyLink, RigidBodySet};
|
||||
use crate::math::{Isometry, Jacobian, Real, ANG_DIM, DIM, SPATIAL_DIM};
|
||||
use crate::math::{ANG_DIM, DIM, Isometry, Jacobian, Real, SPATIAL_DIM};
|
||||
use na::{self, DVector, SMatrix};
|
||||
use parry::math::SpacialVector;
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use crate::dynamics::solver::JointGenericOneBodyConstraint;
|
||||
use crate::dynamics::{
|
||||
joint, FixedJointBuilder, GenericJoint, IntegrationParameters, Multibody, MultibodyLink,
|
||||
RigidBodyVelocity,
|
||||
FixedJointBuilder, GenericJoint, IntegrationParameters, Multibody, MultibodyLink,
|
||||
RigidBodyVelocity, joint,
|
||||
};
|
||||
use crate::math::{
|
||||
Isometry, JacobianViewMut, Real, Rotation, SpacialVector, Translation, Vector, ANG_DIM, DIM,
|
||||
SPATIAL_DIM,
|
||||
ANG_DIM, DIM, Isometry, JacobianViewMut, Real, Rotation, SPATIAL_DIM, SpacialVector,
|
||||
Translation, Vector,
|
||||
};
|
||||
use na::{DVector, DVectorViewMut};
|
||||
#[cfg(feature = "dim3")]
|
||||
|
||||
@@ -4,7 +4,6 @@ use crate::data::{Arena, Coarena, Index};
|
||||
use crate::dynamics::joint::MultibodyLink;
|
||||
use crate::dynamics::{GenericJoint, Multibody, MultibodyJoint, RigidBodyHandle};
|
||||
use crate::geometry::{InteractionGraph, RigidBodyGraphIndex};
|
||||
use crate::parry::partitioning::IndexedData;
|
||||
|
||||
/// The unique handle of an multibody_joint added to a `MultibodyJointSet`.
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
|
||||
@@ -44,15 +43,6 @@ impl Default for MultibodyJointHandle {
|
||||
}
|
||||
}
|
||||
|
||||
impl IndexedData for MultibodyJointHandle {
|
||||
fn default() -> Self {
|
||||
Self(IndexedData::default())
|
||||
}
|
||||
fn index(&self) -> usize {
|
||||
self.0.index()
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg_attr(feature = "serde-serialize", derive(Serialize, Deserialize))]
|
||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||
/// Indexes usable to get a multibody link from a `MultibodyJointSet`.
|
||||
@@ -371,12 +361,12 @@ impl MultibodyJointSet {
|
||||
/// suffer form the ABA problem.
|
||||
pub fn get_unknown_gen(&self, i: u32) -> Option<(&Multibody, usize, MultibodyJointHandle)> {
|
||||
let link = self.rb2mb.get_unknown_gen(i)?;
|
||||
let gen = self.rb2mb.get_gen(i)?;
|
||||
let generation = self.rb2mb.get_gen(i)?;
|
||||
let multibody = self.multibodies.get(link.multibody.0)?;
|
||||
Some((
|
||||
multibody,
|
||||
link.id,
|
||||
MultibodyJointHandle(Index::from_raw_parts(i, gen)),
|
||||
MultibodyJointHandle(Index::from_raw_parts(i, generation)),
|
||||
))
|
||||
}
|
||||
|
||||
@@ -427,7 +417,7 @@ impl MultibodyJointSet {
|
||||
.flat_map(move |link| self.connectivity_graph.interactions_with(link.graph_id))
|
||||
.map(|inter| {
|
||||
// NOTE: the joint handle is always equal to the handle of the second rigid-body.
|
||||
(inter.0, inter.1, MultibodyJointHandle(inter.1 .0))
|
||||
(inter.0, inter.1, MultibodyJointHandle(inter.1.0))
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user