Update to Parry 0.18 (#770)

* update to parry ~main

* use traverse_depth_first

* add example to test intersection

* rely on upstream PR rather than local

* re-enable profiler_ui for examples

* rely on official parry repository

* chore: switch back to the published version of parry

* chore: update changelog

* chore: remove dead code

* fix compilation of rapier3d-meshloader and rapier3d-urdf

* chore: cargo fmt

---------

Co-authored-by: Sébastien Crozet <sebcrozet@dimforge.com>
This commit is contained in:
Thierry Berger
2025-01-08 17:16:34 +01:00
committed by GitHub
parent cf77b5bf57
commit dc4bd24da8
26 changed files with 129 additions and 45 deletions

View File

@@ -20,7 +20,7 @@ usvg = "0.14"
[dependencies.rapier_testbed2d]
path = "../crates/rapier_testbed2d"
features = ["profiling"]
features = ["profiler_ui"]
[dependencies.rapier2d]
path = "../crates/rapier2d"

View File

@@ -16,6 +16,7 @@ mod convex_polygons2;
mod damping2;
mod debug_box_ball2;
mod debug_compression2;
mod debug_intersection2;
mod debug_total_overlap2;
mod debug_vertical_column2;
mod drum2;
@@ -99,6 +100,7 @@ pub fn main() {
("Joint motor position", joint_motor_position2::init_world),
("(Debug) box ball", debug_box_ball2::init_world),
("(Debug) compression", debug_compression2::init_world),
("(Debug) intersection", debug_intersection2::init_world),
("(Debug) total overlap", debug_total_overlap2::init_world),
(
"(Debug) vertical column",

View File

@@ -0,0 +1,64 @@
use rapier2d::prelude::*;
use rapier_testbed2d::Testbed;
pub fn init_world(testbed: &mut Testbed) {
/*
* World
*/
let mut bodies = RigidBodySet::new();
let mut colliders = ColliderSet::new();
let impulse_joints = ImpulseJointSet::new();
let multibody_joints = MultibodyJointSet::new();
let rad = 1.0;
let collider = ColliderBuilder::ball(rad);
let count = 100;
for x in 0..count {
for y in 0..count {
let rigid_body = RigidBodyBuilder::fixed().translation(vector![
(x as f32 - count as f32 / 2.0) * rad * 3.0,
(y as f32 - count as f32 / 2.0) * rad * 3.0
]);
let handle = bodies.insert(rigid_body);
colliders.insert_with_parent(collider.clone(), handle, &mut bodies);
testbed.set_initial_body_color(
handle,
[
x as f32 / count as f32,
(count - y) as f32 / count as f32,
0.5,
],
);
}
}
/*
* Set up the testbed.
*/
testbed.set_world(bodies, colliders, impulse_joints, multibody_joints);
testbed.look_at(point![0.0, 0.0], 50.0);
testbed.add_callback(move |graphics, physics, _, run| {
let slow_time = run.timestep_id as f32 / 3.0;
let intersection = physics.query_pipeline.intersection_with_shape(
&physics.bodies,
&physics.colliders,
&Isometry::translation(slow_time.cos() * 10.0, slow_time.sin() * 10.0),
&Ball::new(rad / 2.0),
QueryFilter::default(),
);
if let Some(graphics) = graphics {
for (handle, _) in physics.bodies.iter() {
graphics.set_body_color(handle, [0.5, 0.5, 0.5]);
}
if let Some(intersection) = intersection {
let collider = physics.colliders.get(intersection).unwrap();
let body_handle = collider.parent().unwrap();
graphics.set_body_color(body_handle, [1.0, 0.0, 0.0]);
}
}
});
}

View File

@@ -85,6 +85,7 @@ pub fn init_world(testbed: &mut Testbed) {
for k in 0..5 {
let collider = ColliderBuilder::trimesh(vertices.clone(), indices.clone())
.unwrap()
.contact_skin(0.2);
let rigid_body = RigidBodyBuilder::dynamic()
.translation(vector![ith as f32 * 8.0 - 20.0, 20.0 + k as f32 * 11.0])