From 3da333f11c93898808eb9233c0cf333743bbf906 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 26 Oct 2020 15:12:10 +0100 Subject: Fix testbed compilation with other backends. --- src_testbed/physx_backend.rs | 38 ++++++++++++++++---------------------- 1 file changed, 16 insertions(+), 22 deletions(-) (limited to 'src_testbed/physx_backend.rs') diff --git a/src_testbed/physx_backend.rs b/src_testbed/physx_backend.rs index ec2e2bf..822ad08 100644 --- a/src_testbed/physx_backend.rs +++ b/src_testbed/physx_backend.rs @@ -422,27 +422,22 @@ fn physx_collider_from_rapier_collider( collider: &Collider, ) -> Option<(ColliderDesc, Isometry3)> { let mut local_pose = *collider.position_wrt_parent(); - let desc = match collider.shape() { - Shape::Cuboid(cuboid) => ColliderDesc::Box( + let shape = collider.shape(); + + let desc = if let Some(cuboid) = shape.as_cuboid() { + ColliderDesc::Box( cuboid.half_extents.x, cuboid.half_extents.y, cuboid.half_extents.z, - ), - Shape::Ball(ball) => ColliderDesc::Sphere(ball.radius), - Shape::Capsule(capsule) => { - let center = capsule.center(); - let mut dir = capsule.b - capsule.a; - - if dir.x < 0.0 { - dir = -dir; - } - - let rot = UnitQuaternion::rotation_between(&Vector3::x(), &dir); - local_pose *= - Translation3::from(center.coords) * rot.unwrap_or(UnitQuaternion::identity()); - ColliderDesc::Capsule(capsule.radius, capsule.height()) - } - Shape::Trimesh(trimesh) => ColliderDesc::TriMesh { + ) + } else if let Some(ball) = shape.as_ball() { + ColliderDesc::Sphere(ball.radius) + } else if let Some(capsule) = shape.as_capsule() { + let rot = UnitQuaternion::rotation_between(&Vector3::x(), &Vector3::y()); + local_pose *= rot.unwrap_or(UnitQuaternion::identity()); + ColliderDesc::Capsule(capsule.radius, capsule.height()) + } else if let Some(trimesh) = shape.as_trimesh() { + ColliderDesc::TriMesh { vertices: trimesh .vertices() .iter() @@ -450,11 +445,10 @@ fn physx_collider_from_rapier_collider( .collect(), indices: trimesh.flat_indices().to_vec(), mesh_scale: Vector3::repeat(1.0).into_glam(), - }, - _ => { - eprintln!("Creating a shape unknown to the PhysX backend."); - return None; } + } else { + eprintln!("Creating a shape unknown to the PhysX backend."); + return None; }; Some((desc, local_pose)) -- cgit From 2b628f9580a826722346983ef42672d4e8dd8053 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 26 Oct 2020 15:58:30 +0100 Subject: Redefine capsules as a segment with a radius, allowing us to reuse the pfm_pfm_contact generator for it. --- src_testbed/physx_backend.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src_testbed/physx_backend.rs') diff --git a/src_testbed/physx_backend.rs b/src_testbed/physx_backend.rs index 822ad08..7db3c4c 100644 --- a/src_testbed/physx_backend.rs +++ b/src_testbed/physx_backend.rs @@ -433,8 +433,15 @@ fn physx_collider_from_rapier_collider( } else if let Some(ball) = shape.as_ball() { ColliderDesc::Sphere(ball.radius) } else if let Some(capsule) = shape.as_capsule() { - let rot = UnitQuaternion::rotation_between(&Vector3::x(), &Vector3::y()); - local_pose *= rot.unwrap_or(UnitQuaternion::identity()); + let center = capsule.center(); + let mut dir = capsule.segment.b - capsule.segment.a; + + if dir.x < 0.0 { + dir = -dir; + } + + let rot = UnitQuaternion::rotation_between(&Vector3::x(), &dir); + local_pose *= Translation3::from(center.coords) * rot.unwrap_or(UnitQuaternion::identity()); ColliderDesc::Capsule(capsule.radius, capsule.height()) } else if let Some(trimesh) = shape.as_trimesh() { ColliderDesc::TriMesh { -- cgit From 08930b1238c90bec16db84c50ac4ea7c9a1e0a5b Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 26 Oct 2020 16:36:07 +0100 Subject: Fix multiple warnings. --- src_testbed/physx_backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src_testbed/physx_backend.rs') diff --git a/src_testbed/physx_backend.rs b/src_testbed/physx_backend.rs index 7db3c4c..74d6af2 100644 --- a/src_testbed/physx_backend.rs +++ b/src_testbed/physx_backend.rs @@ -6,7 +6,7 @@ use rapier::counters::Counters; use rapier::dynamics::{ IntegrationParameters, JointParams, JointSet, RigidBodyHandle, RigidBodySet, }; -use rapier::geometry::{Collider, ColliderSet, Shape}; +use rapier::geometry::{Collider, ColliderSet}; use rapier::utils::WBasis; use std::collections::HashMap; -- cgit