aboutsummaryrefslogtreecommitdiff
path: root/examples3d
diff options
context:
space:
mode:
Diffstat (limited to 'examples3d')
-rw-r--r--examples3d/joints3.rs58
1 files changed, 58 insertions, 0 deletions
diff --git a/examples3d/joints3.rs b/examples3d/joints3.rs
index 902d810..11cd533 100644
--- a/examples3d/joints3.rs
+++ b/examples3d/joints3.rs
@@ -368,6 +368,58 @@ fn create_ball_joints(
}
}
+fn create_ball_joints_with_limits(
+ bodies: &mut RigidBodySet,
+ colliders: &mut ColliderSet,
+ joints: &mut JointSet,
+ origin: Point<f32>,
+) {
+ let shift = vector![0.0, 0.0, 3.0];
+
+ let ground = bodies.insert(
+ RigidBodyBuilder::new_static()
+ .translation(origin.coords)
+ .build(),
+ );
+
+ let ball1 = bodies.insert(
+ RigidBodyBuilder::new_dynamic()
+ .translation(origin.coords + shift)
+ .linvel(vector![20.0, 20.0, 0.0])
+ .build(),
+ );
+ colliders.insert_with_parent(
+ ColliderBuilder::cuboid(1.0, 1.0, 1.0).build(),
+ ball1,
+ bodies,
+ );
+
+ let ball2 = bodies.insert(
+ RigidBodyBuilder::new_dynamic()
+ .translation(origin.coords + shift * 2.0)
+ .build(),
+ );
+ colliders.insert_with_parent(
+ ColliderBuilder::cuboid(1.0, 1.0, 1.0).build(),
+ ball2,
+ bodies,
+ );
+
+ let mut joint1 = BallJoint::new(Point::origin(), Point::from(-shift));
+ joint1.limits_enabled = true;
+ joint1.limits_local_axis1 = Vector::z_axis();
+ joint1.limits_local_axis2 = Vector::z_axis();
+ joint1.limits_angle = 0.2;
+ joints.insert(ground, ball1, joint1);
+
+ let mut joint2 = BallJoint::new(Point::origin(), Point::from(-shift));
+ joint2.limits_enabled = true;
+ joint2.limits_local_axis1 = Vector::z_axis();
+ joint2.limits_local_axis2 = Vector::z_axis();
+ joint2.limits_angle = 0.3;
+ joints.insert(ball1, ball2, joint2);
+}
+
fn create_actuated_revolute_joints(
bodies: &mut RigidBodySet,
colliders: &mut ColliderSet,
@@ -549,6 +601,12 @@ pub fn init_world(testbed: &mut Testbed) {
3,
);
create_ball_joints(&mut bodies, &mut colliders, &mut joints, 15);
+ create_ball_joints_with_limits(
+ &mut bodies,
+ &mut colliders,
+ &mut joints,
+ point![-5.0, 0.0, 0.0],
+ );
/*
* Set up the testbed.