aboutsummaryrefslogtreecommitdiff
path: root/examples3d
diff options
context:
space:
mode:
authorAustin J. Garrett <agarrett777@gmail.com>2025-01-08 12:03:01 -0500
committerGitHub <noreply@github.com>2025-01-08 18:03:01 +0100
commit552cfebab06f33290a9593fd3e2f5d835ee0dc72 (patch)
tree6b86c26395483e14afd86dc0643c359759dcc43c /examples3d
parent2ed19347563f2f8b9dabcf4f818805dede148135 (diff)
downloadrapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.tar.gz
rapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.tar.bz2
rapier-552cfebab06f33290a9593fd3e2f5d835ee0dc72.zip
Fix shape modification not updating graphics in testbed (#708)
* Fix shape modification not updating graphics in testbed * Add update collider to Testbed * chore: lint shape_modifications3 * chore: simplify GraphicsManager::remove_collider_nodes --------- Co-authored-by: Sébastien Crozet <sebcrozet@dimforge.com>
Diffstat (limited to 'examples3d')
-rw-r--r--examples3d/debug_shape_modification3.rs37
1 files changed, 35 insertions, 2 deletions
diff --git a/examples3d/debug_shape_modification3.rs b/examples3d/debug_shape_modification3.rs
index 0fc3cc5..8974218 100644
--- a/examples3d/debug_shape_modification3.rs
+++ b/examples3d/debug_shape_modification3.rs
@@ -35,13 +35,32 @@ pub fn init_world(testbed: &mut Testbed) {
let collider = ColliderBuilder::ball(ball_rad).density(100.0);
let ball_coll_handle = colliders.insert_with_parent(collider, ball_handle, &mut bodies);
+ /*
+ * Colliders without bodies
+ */
+ let shape_size = 3.0;
+ let static_collider =
+ ColliderBuilder::ball(shape_size).translation(vector![-15.0, shape_size, 18.0]);
+ colliders.insert(static_collider);
+
+ let shapes = [
+ SharedShape::ball(shape_size),
+ SharedShape::cuboid(shape_size, shape_size, shape_size),
+ SharedShape::cone(shape_size, shape_size),
+ SharedShape::cylinder(shape_size, shape_size),
+ ];
+ let mut shape_idx = 0;
+ let shapeshifting_collider = ColliderBuilder::new(shapes[shape_idx].clone())
+ .translation(vector![-15.0, shape_size, 9.0]);
+ let shapeshifting_coll_handle = colliders.insert(shapeshifting_collider);
+
let mut linvel = Vector::zeros();
let mut angvel = Vector::zeros();
let mut pos = Isometry::identity();
let mut step = 0;
let snapped_frame = 51;
- testbed.add_callback(move |_, physics, _, _| {
+ testbed.add_callback(move |mut gfx, physics, _, _| {
step += 1;
// Snap the ball velocity or restore it.
@@ -53,6 +72,15 @@ pub fn init_world(testbed: &mut Testbed) {
pos = *ball.position();
}
+ let shapeshifting_coll = physics
+ .colliders
+ .get_mut(shapeshifting_coll_handle)
+ .unwrap();
+ if step % 50 == 0 {
+ shape_idx = (shape_idx + 1) % 4;
+ shapeshifting_coll.set_shape(shapes[shape_idx].clone())
+ }
+
if step == 100 {
ball.set_linvel(linvel, true);
ball.set_angvel(angvel, true);
@@ -62,6 +90,11 @@ pub fn init_world(testbed: &mut Testbed) {
let ball_coll = physics.colliders.get_mut(ball_coll_handle).unwrap();
ball_coll.set_shape(SharedShape::ball(ball_rad * step as f32 * 2.0));
+
+ if let Some(gfx) = &mut gfx {
+ gfx.update_collider(ball_coll_handle, &physics.colliders);
+ gfx.update_collider(shapeshifting_coll_handle, &physics.colliders);
+ }
});
/*
@@ -111,5 +144,5 @@ pub fn init_world(testbed: &mut Testbed) {
* Set up the testbed.
*/
testbed.set_world(bodies, colliders, impulse_joints, multibody_joints);
- testbed.look_at(point![10.0, 10.0, 10.0], Point::origin());
+ testbed.look_at(point![40.0, 40.0, 40.0], Point::origin());
}