diff options
| author | Thierry Berger <contact@thierryberger.com> | 2025-01-08 17:16:34 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-08 17:16:34 +0100 |
| commit | dc4bd24da869cfa8143c3ee9a98cdec662db289e (patch) | |
| tree | 6ea25968a264636f40c4042ef19f3a25d9c4f52f /examples2d | |
| parent | cf77b5bf574f8363794f979510deec5c08e58401 (diff) | |
| download | rapier-dc4bd24da869cfa8143c3ee9a98cdec662db289e.tar.gz rapier-dc4bd24da869cfa8143c3ee9a98cdec662db289e.tar.bz2 rapier-dc4bd24da869cfa8143c3ee9a98cdec662db289e.zip | |
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>
Diffstat (limited to 'examples2d')
| -rw-r--r-- | examples2d/Cargo.toml | 2 | ||||
| -rw-r--r-- | examples2d/all_examples2.rs | 2 | ||||
| -rw-r--r-- | examples2d/debug_intersection2.rs | 64 | ||||
| -rw-r--r-- | examples2d/trimesh2.rs | 1 |
4 files changed, 68 insertions, 1 deletions
diff --git a/examples2d/Cargo.toml b/examples2d/Cargo.toml index dc214b3..a5e81f6 100644 --- a/examples2d/Cargo.toml +++ b/examples2d/Cargo.toml @@ -20,7 +20,7 @@ usvg = "0.14" [dependencies.rapier_testbed2d] path = "../crates/rapier_testbed2d" -features = ["profiling"] +features = ["profiler_ui"] [dependencies.rapier2d] path = "../crates/rapier2d" diff --git a/examples2d/all_examples2.rs b/examples2d/all_examples2.rs index 3d065a5..74bd89d 100644 --- a/examples2d/all_examples2.rs +++ b/examples2d/all_examples2.rs @@ -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", diff --git a/examples2d/debug_intersection2.rs b/examples2d/debug_intersection2.rs new file mode 100644 index 0000000..f54521a --- /dev/null +++ b/examples2d/debug_intersection2.rs @@ -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]); + } + } + }); +} diff --git a/examples2d/trimesh2.rs b/examples2d/trimesh2.rs index a57c0fe..1e4084a 100644 --- a/examples2d/trimesh2.rs +++ b/examples2d/trimesh2.rs @@ -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]) |
