aboutsummaryrefslogtreecommitdiff
path: root/examples3d
diff options
context:
space:
mode:
authorSébastien Crozet <developer@crozet.re>2020-09-01 18:21:11 +0200
committerGitHub <noreply@github.com>2020-09-01 18:21:11 +0200
commitfef3a367d143bddde94e4f919a341cbf8d205293 (patch)
treec66a9aa0f8a4a0b6c54f069e291fa2f12cc16ea3 /examples3d
parentcc05bad0410128b163e81e9f703ccb841f6a9a08 (diff)
parent763b9092422fd5677ffd47ec1b081951dc1c63e4 (diff)
downloadrapier-fef3a367d143bddde94e4f919a341cbf8d205293.tar.gz
rapier-fef3a367d143bddde94e4f919a341cbf8d205293.tar.bz2
rapier-fef3a367d143bddde94e4f919a341cbf8d205293.zip
Merge pull request #6 from dimforge/collider_removal
Add collider removal + fix rigid-bodies with multiple colliders
Diffstat (limited to 'examples3d')
-rw-r--r--examples3d/Cargo.toml4
-rw-r--r--examples3d/all_examples3.rs2
-rw-r--r--examples3d/compound3.rs76
3 files changed, 80 insertions, 2 deletions
diff --git a/examples3d/Cargo.toml b/examples3d/Cargo.toml
index 3176696..efc3cce 100644
--- a/examples3d/Cargo.toml
+++ b/examples3d/Cargo.toml
@@ -1,5 +1,5 @@
[package]
-name = "nphysics-examples-3d"
+name = "rapier-examples-3d"
version = "0.1.0"
authors = [ "Sébastien Crozet <developer@crozet.re>" ]
edition = "2018"
@@ -24,4 +24,4 @@ path = "../build/rapier3d"
[[bin]]
name = "all_examples3"
-path = "./all_examples3.rs" \ No newline at end of file
+path = "./all_examples3.rs"
diff --git a/examples3d/all_examples3.rs b/examples3d/all_examples3.rs
index 04b9b36..2b89efa 100644
--- a/examples3d/all_examples3.rs
+++ b/examples3d/all_examples3.rs
@@ -14,6 +14,7 @@ mod add_remove3;
mod balls3;
mod boxes3;
mod capsules3;
+mod compound3;
mod debug_boxes3;
mod debug_triangle3;
mod domino3;
@@ -71,6 +72,7 @@ pub fn main() {
("Balls", balls3::init_world),
("Boxes", boxes3::init_world),
("Capsules", capsules3::init_world),
+ ("Compound", compound3::init_world),
("Domino", domino3::init_world),
("Heightfield", heightfield3::init_world),
("Joints", joints3::init_world),
diff --git a/examples3d/compound3.rs b/examples3d/compound3.rs
new file mode 100644
index 0000000..a8a9939
--- /dev/null
+++ b/examples3d/compound3.rs
@@ -0,0 +1,76 @@
+use na::Point3;
+use rapier3d::dynamics::{JointSet, RigidBodyBuilder, RigidBodySet};
+use rapier3d::geometry::{ColliderBuilder, ColliderSet};
+use rapier_testbed3d::Testbed;
+
+pub fn init_world(testbed: &mut Testbed) {
+ /*
+ * World
+ */
+ let mut bodies = RigidBodySet::new();
+ let mut colliders = ColliderSet::new();
+ let joints = JointSet::new();
+
+ /*
+ * Ground
+ */
+ let ground_size = 200.1;
+ let ground_height = 0.1;
+
+ let rigid_body = RigidBodyBuilder::new_static()
+ .translation(0.0, -ground_height, 0.0)
+ .build();
+ let handle = bodies.insert(rigid_body);
+ let collider = ColliderBuilder::cuboid(ground_size, ground_height, ground_size).build();
+ colliders.insert(collider, handle, &mut bodies);
+
+ /*
+ * Create the cubes
+ */
+ let num = 8;
+ let rad = 0.2;
+
+ let shift = rad * 4.0 + rad;
+ let centerx = shift * (num / 2) as f32;
+ let centery = shift / 2.0;
+ let centerz = shift * (num / 2) as f32;
+
+ let mut offset = -(num as f32) * (rad * 2.0 + rad) * 0.5;
+
+ for j in 0usize..25 {
+ for i in 0..num {
+ for k in 0usize..num {
+ let x = i as f32 * shift * 5.0 - centerx + offset;
+ let y = j as f32 * (shift * 5.0) + centery + 3.0;
+ let z = k as f32 * shift * 2.0 - centerz + offset;
+
+ // Build the rigid body.
+ let rigid_body = RigidBodyBuilder::new_dynamic().translation(x, y, z).build();
+ let handle = bodies.insert(rigid_body);
+ let collider1 = ColliderBuilder::cuboid(rad * 10.0, rad, rad).build();
+ let collider2 = ColliderBuilder::cuboid(rad, rad * 10.0, rad)
+ .translation(rad * 10.0, rad * 10.0, 0.0)
+ .build();
+ let collider3 = ColliderBuilder::cuboid(rad, rad * 10.0, rad)
+ .translation(-rad * 10.0, rad * 10.0, 0.0)
+ .build();
+ colliders.insert(collider1, handle, &mut bodies);
+ colliders.insert(collider2, handle, &mut bodies);
+ colliders.insert(collider3, handle, &mut bodies);
+ }
+ }
+
+ offset -= 0.05 * rad * (num as f32 - 1.0);
+ }
+
+ /*
+ * Set up the testbed.
+ */
+ testbed.set_world(bodies, colliders, joints);
+ testbed.look_at(Point3::new(100.0, 100.0, 100.0), Point3::origin());
+}
+
+fn main() {
+ let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
+ testbed.run()
+}