From 9bf1321f8f1d2e116f44c2461a53f302c4ef4171 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 8 Dec 2020 17:31:49 +0100 Subject: Outsource the contact manifold, SAT, and some shapes. --- src_testbed/nphysics_backend.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src_testbed/nphysics_backend.rs') diff --git a/src_testbed/nphysics_backend.rs b/src_testbed/nphysics_backend.rs index e112c22..4384480 100644 --- a/src_testbed/nphysics_backend.rs +++ b/src_testbed/nphysics_backend.rs @@ -1,4 +1,4 @@ -use ncollide::shape::{Ball, Capsule, Cuboid, ShapeHandle}; +use ncollide::shape::{Ball, Capsule, Cuboid, HeightField, ShapeHandle}; use nphysics::force_generator::DefaultForceGeneratorSet; use nphysics::joint::{ DefaultJointConstraintSet, FixedConstraint, PrismaticConstraint, RevoluteConstraint, @@ -187,7 +187,10 @@ fn nphysics_collider_from_rapier_collider( pos *= capsule.transform_wrt_y(); ShapeHandle::new(Capsule::new(capsule.half_height(), capsule.radius)) } else if let Some(heightfield) = shape.as_heightfield() { - ShapeHandle::new(heightfield.clone()) + let heights = heightfield.heights(); + let scale = heightfield.scale(); + let heightfield = HeightField::new(heights.clone(), *scale); + ShapeHandle::new(heightfield) } else { #[cfg(feature = "dim3")] if let Some(trimesh) = shape.as_trimesh() { -- cgit From 8d925a02ef97844bc937584a9095c1396daeee35 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Sun, 27 Dec 2020 18:14:22 +0100 Subject: Add convex polygons support. --- src_testbed/nphysics_backend.rs | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'src_testbed/nphysics_backend.rs') diff --git a/src_testbed/nphysics_backend.rs b/src_testbed/nphysics_backend.rs index 4384480..224b5d3 100644 --- a/src_testbed/nphysics_backend.rs +++ b/src_testbed/nphysics_backend.rs @@ -1,3 +1,5 @@ +#[cfg(feature = "dim2")] +use ncollide::shape::ConvexPolygon; use ncollide::shape::{Ball, Capsule, Cuboid, HeightField, ShapeHandle}; use nphysics::force_generator::DefaultForceGeneratorSet; use nphysics::joint::{ @@ -144,6 +146,7 @@ impl NPhysicsWorld { self.mechanical_world .integration_parameters .set_dt(params.dt()); + self.mechanical_world.integration_parameters.warmstart_coeff = params.warmstart_coeff; counters.step_started(); self.mechanical_world.step( @@ -175,12 +178,15 @@ fn nphysics_collider_from_rapier_collider( collider: &Collider, is_dynamic: bool, ) -> Option> { - let margin = ColliderDesc::::default_margin(); + let mut margin = ColliderDesc::::default_margin(); let mut pos = *collider.position_wrt_parent(); let shape = collider.shape(); let shape = if let Some(cuboid) = shape.as_cuboid() { ShapeHandle::new(Cuboid::new(cuboid.half_extents.map(|e| e - margin))) + } else if let Some(cuboid) = shape.as_round_cuboid() { + margin = cuboid.border_radius; + ShapeHandle::new(Cuboid::new(cuboid.base_shape.half_extents)) } else if let Some(ball) = shape.as_ball() { ShapeHandle::new(Ball::new(ball.radius - margin)) } else if let Some(capsule) = shape.as_capsule() { @@ -208,7 +214,12 @@ fn nphysics_collider_from_rapier_collider( } #[cfg(feature = "dim2")] - { + if let Some(polygon) = shape.as_round_convex_polygon() { + margin = polygon.border_radius; + ShapeHandle::new(ConvexPolygon::try_from_points(polygon.base_shape.points()).unwrap()) + } else if let Some(polygon) = shape.as_convex_polygon() { + ShapeHandle::new(ConvexPolygon::try_from_points(polygon.points()).unwrap()) + } else { return None; } }; @@ -219,6 +230,7 @@ fn nphysics_collider_from_rapier_collider( ColliderDesc::new(shape) .position(pos) .density(density) - .sensor(collider.is_sensor()), + .sensor(collider.is_sensor()) + .margin(margin), ) } -- cgit From 28b7866aee68ca844406bea4761d630a7913188d Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 20 Jan 2021 15:40:00 +0100 Subject: Switch to [u32; DIM] instead of Point for element indices. --- src_testbed/nphysics_backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src_testbed/nphysics_backend.rs') diff --git a/src_testbed/nphysics_backend.rs b/src_testbed/nphysics_backend.rs index 224b5d3..b2495bd 100644 --- a/src_testbed/nphysics_backend.rs +++ b/src_testbed/nphysics_backend.rs @@ -205,7 +205,7 @@ fn nphysics_collider_from_rapier_collider( trimesh .indices() .iter() - .map(|idx| na::convert(*idx)) + .map(|idx| na::Point3::new(idx[0] as usize, idx[1] as usize, idx[2] as usize)) .collect(), None, )) -- cgit