aboutsummaryrefslogtreecommitdiff
path: root/benchmarks3d
diff options
context:
space:
mode:
authorSébastien Crozet <sebcrozet@dimforge.com>2024-04-14 15:56:47 +0200
committerSébastien Crozet <sebastien@crozet.re>2024-04-30 23:10:46 +0200
commit3ad9c5ad3ba58b3cd4f19c07c6c89880908e0878 (patch)
tree06d5253a5ced447c9453e4823ce43ffc1541cee5 /benchmarks3d
parent9c5c14070d0a0b0283f3943c0f95552c395f2b97 (diff)
downloadrapier-3ad9c5ad3ba58b3cd4f19c07c6c89880908e0878.tar.gz
rapier-3ad9c5ad3ba58b3cd4f19c07c6c89880908e0878.tar.bz2
rapier-3ad9c5ad3ba58b3cd4f19c07c6c89880908e0878.zip
feat: add a few more debug demos
Diffstat (limited to 'benchmarks3d')
-rw-r--r--benchmarks3d/all_benchmarks3.rs2
-rw-r--r--benchmarks3d/ccd3.rs4
-rw-r--r--benchmarks3d/many_sleep3.rs54
3 files changed, 58 insertions, 2 deletions
diff --git a/benchmarks3d/all_benchmarks3.rs b/benchmarks3d/all_benchmarks3.rs
index 591886e..2f723d1 100644
--- a/benchmarks3d/all_benchmarks3.rs
+++ b/benchmarks3d/all_benchmarks3.rs
@@ -20,6 +20,7 @@ mod joint_fixed3;
mod joint_prismatic3;
mod joint_revolute3;
mod keva3;
+mod many_sleep3;
mod many_static3;
mod pyramid3;
mod stacks3;
@@ -56,6 +57,7 @@ pub fn main() {
("Compound", compound3::init_world),
("Convex polyhedron", convex_polyhedron3::init_world),
("Many static", many_static3::init_world),
+ ("Many sleep", many_sleep3::init_world),
("Heightfield", heightfield3::init_world),
("Stacks", stacks3::init_world),
("Pyramid", pyramid3::init_world),
diff --git a/benchmarks3d/ccd3.rs b/benchmarks3d/ccd3.rs
index f642739..4f7b2c1 100644
--- a/benchmarks3d/ccd3.rs
+++ b/benchmarks3d/ccd3.rs
@@ -56,8 +56,8 @@ pub fn init_world(testbed: &mut Testbed) {
1 => ColliderBuilder::ball(rad),
// Rounded cylinders are much more efficient that cylinder, even if the
// rounding margin is small.
- // 2 => ColliderBuilder::round_cylinder(rad, rad, rad / 10.0),
- // 3 => ColliderBuilder::cone(rad, rad),
+ 2 => ColliderBuilder::round_cylinder(rad, rad, rad / 10.0),
+ 3 => ColliderBuilder::cone(rad, rad),
_ => ColliderBuilder::capsule_y(rad, rad),
};
diff --git a/benchmarks3d/many_sleep3.rs b/benchmarks3d/many_sleep3.rs
new file mode 100644
index 0000000..70f85cc
--- /dev/null
+++ b/benchmarks3d/many_sleep3.rs
@@ -0,0 +1,54 @@
+use rapier3d::prelude::*;
+use rapier_testbed3d::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();
+
+ /*
+ * Create the balls
+ */
+ let num = 50;
+ let rad = 1.0;
+
+ let shift = rad * 2.0 + 1.0;
+ let centerx = shift * (num as f32) / 2.0;
+ let centery = shift / 2.0;
+ let centerz = shift * (num as f32) / 2.0;
+
+ for i in 0..num {
+ for j in 0usize..num {
+ for k in 0..num {
+ let x = i as f32 * shift - centerx;
+ let y = j as f32 * shift + centery;
+ let z = k as f32 * shift - centerz;
+
+ let status = if j == 0 {
+ RigidBodyType::Fixed
+ } else {
+ RigidBodyType::Dynamic
+ };
+ let density = 0.477;
+
+ // Build the rigid body.
+ let rigid_body = RigidBodyBuilder::new(status)
+ .translation(vector![x, y, z])
+ .sleeping(true); // j < num - 1);
+ let handle = bodies.insert(rigid_body);
+ let collider = ColliderBuilder::ball(rad).density(density);
+ colliders.insert_with_parent(collider, handle, &mut bodies);
+ }
+ }
+ }
+
+ /*
+ * Set up the testbed.
+ */
+ testbed.set_world(bodies, colliders, impulse_joints, multibody_joints);
+ testbed.look_at(point![100.0, 100.0, 100.0], Point::origin());
+}