aboutsummaryrefslogtreecommitdiff
path: root/examples3d
diff options
context:
space:
mode:
Diffstat (limited to 'examples3d')
-rw-r--r--examples3d/Cargo.toml8
-rw-r--r--examples3d/all_examples3.rs5
-rw-r--r--examples3d/all_examples3_wasm.rs136
-rw-r--r--examples3d/ccd3.rs19
-rw-r--r--examples3d/collision_groups3.rs11
-rw-r--r--examples3d/compound3.rs5
-rw-r--r--examples3d/convex_decomposition3.rs67
-rw-r--r--examples3d/convex_polyhedron3.rs5
-rw-r--r--examples3d/debug_add_remove_collider3.rs14
-rw-r--r--examples3d/debug_big_colliders3.rs5
-rw-r--r--examples3d/debug_boxes3.rs5
-rw-r--r--examples3d/debug_cylinder3.rs5
-rw-r--r--examples3d/debug_dynamic_collider_add3.rs19
-rw-r--r--examples3d/debug_friction3.rs7
-rw-r--r--examples3d/debug_infinite_fall3.rs5
-rw-r--r--examples3d/debug_prismatic3.rs5
-rw-r--r--examples3d/debug_rollback3.rs7
-rw-r--r--examples3d/debug_shape_modification3.rs7
-rw-r--r--examples3d/debug_triangle3.rs5
-rw-r--r--examples3d/debug_trimesh3.rs18
-rw-r--r--examples3d/domino3.rs7
-rw-r--r--examples3d/fountain3.rs15
-rw-r--r--examples3d/heightfield3.rs5
-rw-r--r--examples3d/joints3.rs5
-rw-r--r--examples3d/keva3.rs9
-rw-r--r--examples3d/locked_rotations3.rs5
-rw-r--r--examples3d/one_way_platforms3.rs11
-rw-r--r--examples3d/platform3.rs7
-rw-r--r--examples3d/primitives3.rs5
-rw-r--r--examples3d/restitution3.rs5
-rw-r--r--examples3d/sensor3.rs11
-rw-r--r--examples3d/trimesh3.rs5
32 files changed, 228 insertions, 220 deletions
diff --git a/examples3d/Cargo.toml b/examples3d/Cargo.toml
index b7c71e0..37c641f 100644
--- a/examples3d/Cargo.toml
+++ b/examples3d/Cargo.toml
@@ -17,7 +17,8 @@ rand = "0.8"
getrandom = { version = "0.2", features = [ "js" ] }
Inflector = "0.11"
nalgebra = "0.26"
-kiss3d = "0.31"
+wasm-bindgen = "0.2"
+obj-rs = { version = "0.6", default-features = false }
[dependencies.rapier_testbed3d]
path = "../build/rapier_testbed3d"
@@ -32,3 +33,8 @@ path = "./all_examples3.rs"
[[bin]]
name = "harness_capsules3"
path = "./harness_capsules3.rs"
+
+#[lib]
+#crate-type = ["cdylib", "rlib"]
+#path = "./all_examples3_wasm.rs"
+
diff --git a/examples3d/all_examples3.rs b/examples3d/all_examples3.rs
index 8031814..f587da3 100644
--- a/examples3d/all_examples3.rs
+++ b/examples3d/all_examples3.rs
@@ -7,7 +7,7 @@ use wasm_bindgen::prelude::*;
use inflector::Inflector;
-use rapier_testbed3d::Testbed;
+use rapier_testbed3d::{Testbed, TestbedApp};
use std::cmp::Ordering;
mod ccd3;
@@ -131,7 +131,6 @@ pub fn main() {
.position(|builder| builder.0.to_camel_case().as_str() == demo.as_str())
.unwrap_or(0);
- let testbed = Testbed::from_builders(i, builders);
-
+ let testbed = TestbedApp::from_builders(i, builders);
testbed.run()
}
diff --git a/examples3d/all_examples3_wasm.rs b/examples3d/all_examples3_wasm.rs
new file mode 100644
index 0000000..f587da3
--- /dev/null
+++ b/examples3d/all_examples3_wasm.rs
@@ -0,0 +1,136 @@
+#![allow(dead_code)]
+
+extern crate nalgebra as na;
+
+#[cfg(target_arch = "wasm32")]
+use wasm_bindgen::prelude::*;
+
+use inflector::Inflector;
+
+use rapier_testbed3d::{Testbed, TestbedApp};
+use std::cmp::Ordering;
+
+mod ccd3;
+mod collision_groups3;
+mod compound3;
+mod convex_decomposition3;
+mod convex_polyhedron3;
+mod damping3;
+mod debug_add_remove_collider3;
+mod debug_big_colliders3;
+mod debug_boxes3;
+mod debug_cylinder3;
+mod debug_dynamic_collider_add3;
+mod debug_friction3;
+mod debug_infinite_fall3;
+mod debug_prismatic3;
+mod debug_rollback3;
+mod debug_shape_modification3;
+mod debug_triangle3;
+mod debug_trimesh3;
+mod domino3;
+mod fountain3;
+mod heightfield3;
+mod joints3;
+mod keva3;
+mod locked_rotations3;
+mod one_way_platforms3;
+mod platform3;
+mod primitives3;
+mod restitution3;
+mod sensor3;
+mod trimesh3;
+
+fn demo_name_from_command_line() -> Option<String> {
+ let mut args = std::env::args();
+
+ while let Some(arg) = args.next() {
+ if &arg[..] == "--example" {
+ return args.next();
+ }
+ }
+
+ None
+}
+
+#[cfg(any(target_arch = "wasm32", target_arch = "asmjs"))]
+fn demo_name_from_url() -> Option<String> {
+ None
+ // let window = stdweb::web::window();
+ // let hash = window.location()?.search().ok()?;
+ // if hash.len() > 0 {
+ // Some(hash[1..].to_string())
+ // } else {
+ // None
+ // }
+}
+
+#[cfg(not(any(target_arch = "wasm32", target_arch = "asmjs")))]
+fn demo_name_from_url() -> Option<String> {
+ None
+}
+
+#[cfg_attr(target_arch = "wasm32", wasm_bindgen(start))]
+pub fn main() {
+ let demo = demo_name_from_command_line()
+ .or_else(|| demo_name_from_url())
+ .unwrap_or(String::new())
+ .to_camel_case();
+
+ let mut builders: Vec<(_, fn(&mut Testbed))> = vec![
+ ("Fountain", fountain3::init_world),
+ ("Primitives", primitives3::init_world),
+ ("CCD", ccd3::init_world),
+ ("Collision groups", collision_groups3::init_world),
+ ("Compound", compound3::init_world),
+ ("Convex decomposition", convex_decomposition3::init_world),
+ ("Convex polyhedron", convex_polyhedron3::init_world),
+ ("Damping", damping3::init_world),
+ ("Domino", domino3::init_world),
+ ("Heightfield", heightfield3::init_world),
+ ("Joints", joints3::init_world),
+ ("Locked rotations", locked_rotations3::init_world),
+ ("One-way platforms", one_way_platforms3::init_world),
+ ("Platform", platform3::init_world),
+ ("Restitution", restitution3::init_world),
+ ("Sensor", sensor3::init_world),
+ ("TriMesh", trimesh3::init_world),
+ ("Keva tower", keva3::init_world),
+ (
+ "(Debug) add/rm collider",
+ debug_add_remove_collider3::init_world,
+ ),
+ ("(Debug) big colliders", debug_big_colliders3::init_world),
+ ("(Debug) boxes", debug_boxes3::init_world),
+ (
+ "(Debug) dyn. coll. add",
+ debug_dynamic_collider_add3::init_world,
+ ),
+ ("(Debug) friction", debug_friction3::init_world),
+ ("(Debug) triangle", debug_triangle3::init_world),
+ ("(Debug) trimesh", debug_trimesh3::init_world),
+ ("(Debug) cylinder", debug_cylinder3::init_world),
+ ("(Debug) infinite fall", debug_infinite_fall3::init_world),
+ ("(Debug) prismatic", debug_prismatic3::init_world),
+ ("(Debug) rollback", debug_rollback3::init_world),
+ (
+ "(Debug) shape modification",
+ debug_shape_modification3::init_world,
+ ),
+ ];
+
+ // Lexicographic sort, with stress tests moved at the end of the list.
+ builders.sort_by(|a, b| match (a.0.starts_with("("), b.0.starts_with("(")) {
+ (true, true) | (false, false) => a.0.cmp(b.0),
+ (true, false) => Ordering::Greater,
+ (false, true) => Ordering::Less,
+ });
+
+ let i = builders
+ .iter()
+ .position(|builder| builder.0.to_camel_case().as_str() == demo.as_str())
+ .unwrap_or(0);
+
+ let testbed = TestbedApp::from_builders(i, builders);
+ testbed.run()
+}
diff --git a/examples3d/ccd3.rs b/examples3d/ccd3.rs
index f6b558d..e5dee33 100644
--- a/examples3d/ccd3.rs
+++ b/examples3d/ccd3.rs
@@ -30,9 +30,15 @@ fn create_wall(
colliders.insert(collider, handle, bodies);
k += 1;
if k % 2 == 0 {
- testbed.set_body_color(handle, Point3::new(255. / 255., 131. / 255., 244.0 / 255.));
+ testbed.set_initial_body_color(
+ handle,
+ Point3::new(255. / 255., 131. / 255., 244.0 / 255.),
+ );
} else {
- testbed.set_body_color(handle, Point3::new(131. / 255., 255. / 255., 244.0 / 255.));
+ testbed.set_initial_body_color(
+ handle,
+ Point3::new(131. / 255., 255. / 255., 244.0 / 255.),
+ );
}
}
}
@@ -114,10 +120,10 @@ pub fn init_world(testbed: &mut Testbed) {
.build();
let handle = bodies.insert(rigid_body);
colliders.insert(collider.clone(), handle, &mut bodies);
- testbed.set_body_color(handle, Point3::new(0.2, 0.2, 1.0));
+ testbed.set_initial_body_color(handle, Point3::new(0.2, 0.2, 1.0));
// Callback that will be executed on the main loop to handle proximities.
- testbed.add_callback(move |_, mut graphics, physics, events, _| {
+ testbed.add_callback(move |mut graphics, physics, events, _| {
while let Ok(prox) = events.intersection_events.try_recv() {
let color = if prox.intersecting {
Point3::new(1.0, 1.0, 0.0)
@@ -145,8 +151,3 @@ pub fn init_world(testbed: &mut 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()
-}
diff --git a/examples3d/collision_groups3.rs b/examples3d/collision_groups3.rs
index 625bc50..a79a4bc 100644
--- a/examples3d/collision_groups3.rs
+++ b/examples3d/collision_groups3.rs
@@ -39,7 +39,7 @@ pub fn init_world(testbed: &mut Testbed) {
.build();
let green_collider_handle = colliders.insert(green_floor, floor_handle, &mut bodies);
- testbed.set_collider_initial_color(green_collider_handle, Point3::new(0.0, 1.0, 0.0));
+ testbed.set_initial_collider_color(green_collider_handle, Point3::new(0.0, 1.0, 0.0));
/*
* A blue floor that will collide with the BLUE group only.
@@ -50,7 +50,7 @@ pub fn init_world(testbed: &mut Testbed) {
.build();
let blue_collider_handle = colliders.insert(blue_floor, floor_handle, &mut bodies);
- testbed.set_collider_initial_color(blue_collider_handle, Point3::new(0.0, 0.0, 1.0));
+ testbed.set_initial_collider_color(blue_collider_handle, Point3::new(0.0, 0.0, 1.0));
/*
* Create the cubes
@@ -84,7 +84,7 @@ pub fn init_world(testbed: &mut Testbed) {
.build();
colliders.insert(collider, handle, &mut bodies);
- testbed.set_body_color(handle, color);
+ testbed.set_initial_body_color(handle, color);
}
}
}
@@ -95,8 +95,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/compound3.rs b/examples3d/compound3.rs
index 4168fe9..51523f3 100644
--- a/examples3d/compound3.rs
+++ b/examples3d/compound3.rs
@@ -93,8 +93,3 @@ pub fn init_world(testbed: &mut 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()
-}
diff --git a/examples3d/convex_decomposition3.rs b/examples3d/convex_decomposition3.rs
index e175f57..1d19597 100644
--- a/examples3d/convex_decomposition3.rs
+++ b/examples3d/convex_decomposition3.rs
@@ -1,10 +1,11 @@
-use kiss3d::loader::obj;
-use na::{Point3, Translation3};
+use na::Point3;
+use obj::raw::object::Polygon;
use rapier3d::dynamics::{JointSet, RigidBodyBuilder, RigidBodySet};
use rapier3d::geometry::{ColliderBuilder, ColliderSet, SharedShape};
-use rapier3d::parry::bounding_volume::{self, BoundingVolume};
+use rapier3d::parry::bounding_volume;
use rapier_testbed3d::Testbed;
-use std::path::Path;
+use std::fs::File;
+use std::io::BufReader;
/*
* NOTE: The `r` macro is only here to convert from f64 to the `N` scalar type.
@@ -42,47 +43,45 @@ pub fn init_world(testbed: &mut Testbed) {
for (igeom, obj_path) in geoms.into_iter().enumerate() {
let deltas = na::one();
- let mtl_path = Path::new("");
let mut shapes = Vec::new();
println!("Parsing and decomposing: {}", obj_path);
- let obj = obj::parse_file(&Path::new(&obj_path), &mtl_path, "");
+ let input = BufReader::new(File::open(obj_path).unwrap());
- if let Ok(model) = obj {
- let meshes: Vec<_> = model
+ if let Ok(model) = obj::raw::parse_obj(input) {
+ let mut vertices: Vec<_> = model
+ .positions
+ .iter()
+ .map(|v| Point3::new(v.0, v.1, v.2))
+ .collect();
+ use std::iter::FromIterator;
+ let indices: Vec<_> = model
+ .polygons
.into_iter()
- .map(|mesh| mesh.1.to_trimesh().unwrap())
+ .flat_map(|p| match p {
+ Polygon::P(idx) => idx.into_iter(),
+ Polygon::PT(idx) => Vec::from_iter(idx.into_iter().map(|i| i.0)).into_iter(),
+ Polygon::PN(idx) => Vec::from_iter(idx.into_iter().map(|i| i.0)).into_iter(),
+ Polygon::PTN(idx) => Vec::from_iter(idx.into_iter().map(|i| i.0)).into_iter(),
+ })
.collect();
// Compute the size of the model, to scale it and have similar size for everything.
- let mut aabb =
- bounding_volume::details::point_cloud_aabb(&deltas, &meshes[0].coords[..]);
-
- for mesh in meshes[1..].iter() {
- aabb.merge(&bounding_volume::details::point_cloud_aabb(
- &deltas,
- &mesh.coords[..],
- ));
- }
-
- let center = aabb.center().coords;
+ let aabb = bounding_volume::details::point_cloud_aabb(&deltas, &vertices);
+ let center = aabb.center();
let diag = (aabb.maxs - aabb.mins).norm();
- for mut trimesh in meshes.into_iter() {
- trimesh.translate_by(&Translation3::from(-center));
- trimesh.scale_by_scalar(6.0 / diag);
+ vertices
+ .iter_mut()
+ .for_each(|p| *p = (*p - center.coords) * 6.0 / diag);
- let vertices = trimesh.coords;
- let indices: Vec<_> = trimesh
- .indices
- .unwrap_unified()
- .into_iter()
- .map(|idx| [idx.x, idx.y, idx.z])
- .collect();
+ let indices: Vec<_> = indices
+ .chunks(3)
+ .map(|idx| [idx[0] as u32, idx[1] as u32, idx[2] as u32])
+ .collect();
- let decomposed_shape = SharedShape::convex_decomposition(&vertices, &indices);
- shapes.push(decomposed_shape);
- }
+ let decomposed_shape = SharedShape::convex_decomposition(&vertices, &indices);
+ shapes.push(decomposed_shape);
// let compound = SharedShape::compound(compound_parts);
@@ -122,7 +121,7 @@ fn models() -> Vec<String> {
"media/models/hornbug.obj".to_string(),
"media/models/octopus_decimated.obj".to_string(),
"media/models/rabbit_decimated.obj".to_string(),
- "media/models/rust_logo.obj".to_string(),
+ // "media/models/rust_logo.obj".to_string(),
"media/models/rust_logo_simplified.obj".to_string(),
"media/models/screwdriver_decimated.obj".to_string(),
"media/models/table.obj".to_string(),
diff --git a/examples3d/convex_polyhedron3.rs b/examples3d/convex_polyhedron3.rs
index 3cbcbf1..c43a781 100644
--- a/examples3d/convex_polyhedron3.rs
+++ b/examples3d/convex_polyhedron3.rs
@@ -71,8 +71,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(30.0, 30.0, 30.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_add_remove_collider3.rs b/examples3d/debug_add_remove_collider3.rs
index 9aab754..00a0ff3 100644
--- a/examples3d/debug_add_remove_collider3.rs
+++ b/examples3d/debug_add_remove_collider3.rs
@@ -34,12 +34,13 @@ pub fn init_world(testbed: &mut Testbed) {
let collider = ColliderBuilder::ball(ball_rad).density(100.0).build();
colliders.insert(collider, ball_handle, &mut bodies);
- testbed.add_callback(move |mut window, mut graphics, physics, _, _| {
+ testbed.add_callback(move |_, physics, _, _| {
// Remove then re-add the ground collider.
+ let removed_collider_handle = ground_collider_handle;
let coll = physics
.colliders
.remove(
- ground_collider_handle,
+ removed_collider_handle,
&mut physics.islands,
&mut physics.bodies,
true,
@@ -48,10 +49,6 @@ pub fn init_world(testbed: &mut Testbed) {
ground_collider_handle = physics
.colliders
.insert(coll, ground_handle, &mut physics.bodies);
-
- if let (Some(graphics), Some(window)) = (&mut graphics, &mut window) {
- graphics.add_collider(window, ground_collider_handle, &physics.colliders);
- }
});
/*
@@ -60,8 +57,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_big_colliders3.rs b/examples3d/debug_big_colliders3.rs
index 956f36a..a524f97 100644
--- a/examples3d/debug_big_colliders3.rs
+++ b/examples3d/debug_big_colliders3.rs
@@ -43,8 +43,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_boxes3.rs b/examples3d/debug_boxes3.rs
index 919cdd6..cba9d01 100644
--- a/examples3d/debug_boxes3.rs
+++ b/examples3d/debug_boxes3.rs
@@ -44,8 +44,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_cylinder3.rs b/examples3d/debug_cylinder3.rs
index 0717c67..0b68b62 100644
--- a/examples3d/debug_cylinder3.rs
+++ b/examples3d/debug_cylinder3.rs
@@ -58,8 +58,3 @@ pub fn init_world(testbed: &mut 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()
-}
diff --git a/examples3d/debug_dynamic_collider_add3.rs b/examples3d/debug_dynamic_collider_add3.rs
index 61c1482..6a4589b 100644
--- a/examples3d/debug_dynamic_collider_add3.rs
+++ b/examples3d/debug_dynamic_collider_add3.rs
@@ -45,7 +45,7 @@ pub fn init_world(testbed: &mut Testbed) {
let mut extra_colliders = Vec::new();
let snapped_frame = 51;
- testbed.add_callback(move |mut window, mut graphics, physics, _, _| {
+ testbed.add_callback(move |mut graphics, physics, _, _| {
step += 1;
// Add a bigger ball collider
@@ -57,8 +57,8 @@ pub fn init_world(testbed: &mut Testbed) {
.colliders
.insert(collider, ball_handle, &mut physics.bodies);
- if let (Some(graphics), Some(window)) = (&mut graphics, &mut window) {
- graphics.add_collider(window, new_ball_collider_handle, &physics.colliders);
+ if let Some(graphics) = &mut graphics {
+ graphics.add_collider(new_ball_collider_handle, &physics.colliders);
}
extra_colliders.push(new_ball_collider_handle);
@@ -79,6 +79,10 @@ pub fn init_world(testbed: &mut Testbed) {
step = snapped_frame;
for handle in &extra_colliders {
+ if let Some(graphics) = &mut graphics {
+ graphics.remove_collider(*handle, &physics.colliders);
+ }
+
physics
.colliders
.remove(*handle, &mut physics.islands, &mut physics.bodies, true);
@@ -102,8 +106,8 @@ pub fn init_world(testbed: &mut Testbed) {
.colliders
.insert(coll, ground_handle, &mut physics.bodies);
- if let (Some(graphics), Some(window)) = (&mut graphics, &mut window) {
- graphics.add_collider(window, new_ground_collider_handle, &physics.colliders);
+ if let Some(graphics) = &mut graphics {
+ graphics.add_collider(new_ground_collider_handle, &physics.colliders);
}
extra_colliders.push(new_ground_collider_handle);
@@ -115,8 +119,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_friction3.rs b/examples3d/debug_friction3.rs
index 5cf40b3..72631a7 100644
--- a/examples3d/debug_friction3.rs
+++ b/examples3d/debug_friction3.rs
@@ -41,10 +41,5 @@ pub fn init_world(testbed: &mut Testbed) {
* Set up the testbed.
*/
testbed.set_world(bodies, colliders, joints);
- testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
-}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
+ testbed.look_at(Point3::new(100.0, 100.0, 100.0), Point3::origin());
}
diff --git a/examples3d/debug_infinite_fall3.rs b/examples3d/debug_infinite_fall3.rs
index e70a386..ef41c92 100644
--- a/examples3d/debug_infinite_fall3.rs
+++ b/examples3d/debug_infinite_fall3.rs
@@ -48,8 +48,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.look_at(Point3::new(100.0, -10.0, 100.0), Point3::origin());
testbed.set_world(bodies, colliders, joints);
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_prismatic3.rs b/examples3d/debug_prismatic3.rs
index 5ccf2eb..07cf381 100644
--- a/examples3d/debug_prismatic3.rs
+++ b/examples3d/debug_prismatic3.rs
@@ -103,8 +103,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_rollback3.rs b/examples3d/debug_rollback3.rs
index 27b27cf..8f1bede 100644
--- a/examples3d/debug_rollback3.rs
+++ b/examples3d/debug_rollback3.rs
@@ -44,7 +44,7 @@ pub fn init_world(testbed: &mut Testbed) {
let mut step = 0;
let snapped_frame = 51;
- testbed.add_callback(move |_, _, physics, _, _| {
+ testbed.add_callback(move |_, physics, _, _| {
step += 1;
// Snap the ball velocity or restore it.
@@ -70,8 +70,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_shape_modification3.rs b/examples3d/debug_shape_modification3.rs
index 7ec06dd..bef56fa 100644
--- a/examples3d/debug_shape_modification3.rs
+++ b/examples3d/debug_shape_modification3.rs
@@ -44,7 +44,7 @@ pub fn init_world(testbed: &mut Testbed) {
let mut step = 0;
let snapped_frame = 51;
- testbed.add_callback(move |_, _, physics, _, _| {
+ testbed.add_callback(move |_, physics, _, _| {
step += 1;
// Snap the ball velocity or restore it.
@@ -116,8 +116,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_triangle3.rs b/examples3d/debug_triangle3.rs
index 42bd06c..341f396 100644
--- a/examples3d/debug_triangle3.rs
+++ b/examples3d/debug_triangle3.rs
@@ -41,8 +41,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/debug_trimesh3.rs b/examples3d/debug_trimesh3.rs
index 186e673..5a8ed4b 100644
--- a/examples3d/debug_trimesh3.rs
+++ b/examples3d/debug_trimesh3.rs
@@ -24,16 +24,16 @@ pub fn init_world(testbed: &mut Testbed) {
Point3::new(-width, -width, width),
];
let idx = vec![
- [0, 1, 2],
- [0, 2, 3],
+ [0, 2, 1],
+ [0, 3, 2],
[4, 5, 6],
[4, 6, 7],
[0, 4, 7],
[0, 7, 3],
- [1, 5, 6],
- [1, 6, 2],
- [3, 2, 7],
- [2, 6, 7],
+ [1, 6, 5],
+ [1, 2, 6],
+ [3, 7, 2],
+ [2, 7, 6],
[0, 1, 5],
[0, 5, 4],
];
@@ -54,6 +54,7 @@ pub fn init_world(testbed: &mut Testbed) {
let handle = bodies.insert(rigid_body);
let collider = ColliderBuilder::trimesh(vtx, idx).build();
colliders.insert(collider, handle, &mut bodies);
+ testbed.set_initial_body_color(handle, Point3::new(0.3, 0.3, 0.3));
/*
* Set up the testbed.
@@ -61,8 +62,3 @@ pub fn init_world(testbed: &mut Testbed) {
testbed.set_world(bodies, colliders, joints);
testbed.look_at(Point3::new(10.0, 10.0, 10.0), Point3::origin());
}
-
-fn main() {
- let testbed = Testbed::from_builders(0, vec![("Boxes", init_world)]);
- testbed.run()
-}
diff --git a/examples3d/domino3.rs b/examples3d/domino3.rs
index 66d0f41..b619da5 100644
--- a/examples3d/domino3.rs
+++ b/examples3d/domino3.rs
@@ -60,7 +60,7 @@ pub fn init_world(testbed: &mut Testbed) {
let handle = bodies.insert(rigid_body);
let collider = ColliderBuilder::cuboid(thickness, width * 2.0, width).build();
colliders.insert(collider, handle, &mut bodies);
- testbed.set_body_color(handle, colors[i % 2]);
+ testbed.set_initial_body_color(handle, colors[i % 2]);
} else {
skip -= 1;
}
@@ -78,8 +78,3 @@ pub fn init_world(testbed: &mut 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()
-}
diff --git a/examples3d/fountain3.rs b/examples3d/fountain3.rs
index 08e1dfe..0d228c7 100644
--- a/examples3d/fountain3.rs
+++ b/examples3d/fountain3.rs
@@ -25,7 +25,7 @@ pub fn init_world(testbed: &mut Testbed) {
colliders.insert(collider, handle, &mut bodies);
// Callback that will be executed on the main loop to handle proximities.
- testbed.add_callback(move |mut window, mut graphics, physics, _, run_state| {
+ testbed.add_callback(move |mut graphics, physics, _, run_state| {
let rigid_body = RigidBodyBuilder::new_dynamic()
.translation(0.0, 10.0, 0.0)
.build();
@@ -40,8 +40,8 @@ pub fn init_world(testbed: &mut Testbed) {
.colliders
.insert(collider, handle, &mut physics.bodies);
- if let (Some(graphics), Some(window)) = (&mut graphics, &mut window) {
- graphics.add(window, handle, &physics.bodies, &physics.colliders);
+ if let Some(graphics) = &mut graphics {
+ graphics.add_body(handle, &physics.bodies, &physic