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/debug_intersection2.rs | |
| 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/debug_intersection2.rs')
| -rw-r--r-- | examples2d/debug_intersection2.rs | 64 |
1 files changed, 64 insertions, 0 deletions
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]); + } + } + }); +} |
