aboutsummaryrefslogtreecommitdiff
path: root/benchmarks3d
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2022-11-26 17:45:14 +0100
committerSébastien Crozet <developer@crozet.re>2022-12-11 15:20:33 +0100
commit683baf6bf77cfb41227ea6ed4a42499d1e051cdf (patch)
treec4469fde3ab77f192fdd2090eb0a44d6d47f016a /benchmarks3d
parent46d976d97bc9334004a58a19bc9cab3ea78e9569 (diff)
downloadrapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.tar.gz
rapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.tar.bz2
rapier-683baf6bf77cfb41227ea6ed4a42499d1e051cdf.zip
Allow the PhysicsPipeline and CollisionPipeline to update the QueryPipeline incrementally
Diffstat (limited to 'benchmarks3d')
-rw-r--r--benchmarks3d/all_benchmarks3.rs2
-rw-r--r--benchmarks3d/many_static3.rs52
2 files changed, 54 insertions, 0 deletions
diff --git a/benchmarks3d/all_benchmarks3.rs b/benchmarks3d/all_benchmarks3.rs
index 6a3f756..bca730b 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_static3;
mod pyramid3;
mod stacks3;
mod trimesh3;
@@ -54,6 +55,7 @@ pub fn main() {
("CCD", ccd3::init_world),
("Compound", compound3::init_world),
("Convex polyhedron", convex_polyhedron3::init_world),
+ ("Many static", many_static3::init_world),
("Heightfield", heightfield3::init_world),
("Stacks", stacks3::init_world),
("Pyramid", pyramid3::init_world),
diff --git a/benchmarks3d/many_static3.rs b/benchmarks3d/many_static3.rs
new file mode 100644
index 0000000..3a0dbea
--- /dev/null
+++ b/benchmarks3d/many_static3.rs
@@ -0,0 +1,52 @@
+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 < num - 1 {
+ RigidBodyType::Fixed
+ } else {
+ RigidBodyType::Dynamic
+ };
+ let density = 0.477;
+
+ // Build the rigid body.
+ let rigid_body = RigidBodyBuilder::new(status).translation(vector![x, y, z]);
+ 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());
+}