Implement multibody joints and the new solver

This commit is contained in:
Sébastien Crozet
2022-01-02 14:47:40 +01:00
parent b45d4b5ac2
commit f74b8401ad
182 changed files with 9871 additions and 12645 deletions

View File

@@ -216,12 +216,13 @@ impl InteractionGroups {
) where
Bodies: ComponentSet<RigidBodyType> + ComponentSet<RigidBodyIds>,
{
// NOTE: in 3D we have up to 10 different joint types.
// In 2D we only have 5 joint types.
// TODO: right now, we only sort based on the axes locked by the joint.
// We could also take motors and limits into account in the future (most of
// the SIMD constraints generation for motors and limits is already implemented).
#[cfg(feature = "dim3")]
const NUM_JOINT_TYPES: usize = 10;
const NUM_JOINT_TYPES: usize = 64;
#[cfg(feature = "dim2")]
const NUM_JOINT_TYPES: usize = 5;
const NUM_JOINT_TYPES: usize = 8;
// The j-th bit of joint_type_conflicts[i] indicates that the
// j-th bucket contains a joint with a type different than `i`.
@@ -254,13 +255,13 @@ impl InteractionGroups {
continue;
}
if !interaction.supports_simd_constraints() {
if !interaction.data.supports_simd_constraints() {
// This joint does not support simd constraints yet.
self.nongrouped_interactions.push(*interaction_i);
continue;
}
let ijoint = interaction.params.type_id();
let ijoint = interaction.data.locked_axes.bits() as usize;
let i1 = ids1.active_set_offset;
let i2 = ids2.active_set_offset;
let conflicts =