diff options
| author | Sébastien Crozet <developer@crozet.re> | 2022-01-23 08:56:27 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-23 08:56:27 -0800 |
| commit | 1608a1323ed76cdf33644cfea599cea715acf7a9 (patch) | |
| tree | 07b975a2b22b31f74a5efcbaa3d2a30aea31ae47 /examples3d-f64 | |
| parent | ca635674fc72071d7ff546a749ac22766579b280 (diff) | |
| parent | b3b675d2de64d4437748ad46e41cca90c691de1a (diff) | |
| download | rapier-1608a1323ed76cdf33644cfea599cea715acf7a9.tar.gz rapier-1608a1323ed76cdf33644cfea599cea715acf7a9.tar.bz2 rapier-1608a1323ed76cdf33644cfea599cea715acf7a9.zip | |
Merge pull request #282 from dimforge/critical-damping
Improve the CFM implementation
Diffstat (limited to 'examples3d-f64')
| -rw-r--r-- | examples3d-f64/Cargo.toml | 36 | ||||
| -rw-r--r-- | examples3d-f64/all_examples3-f64.rs | 67 | ||||
| -rw-r--r-- | examples3d-f64/debug_serialized3.rs | 36 |
3 files changed, 139 insertions, 0 deletions
diff --git a/examples3d-f64/Cargo.toml b/examples3d-f64/Cargo.toml new file mode 100644 index 0000000..27a4491 --- /dev/null +++ b/examples3d-f64/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "rapier-examples-3d-f64" +version = "0.1.0" +authors = [ "Sébastien Crozet <developer@crozet.re>" ] +edition = "2021" +default-run = "all_examples3-f64" + +[features] +parallel = [ "rapier3d-f64/parallel", "rapier_testbed3d-f64/parallel" ] +simd-stable = [ "rapier3d-f64/simd-stable" ] +simd-nightly = [ "rapier3d-f64/simd-nightly" ] +enhanced-determinism = [ "rapier3d-f64/enhanced-determinism" ] + +[dependencies] +rand = "0.8" +getrandom = { version = "0.2", features = [ "js" ] } +Inflector = "0.11" +wasm-bindgen = "0.2" +obj-rs = { version = "0.6", default-features = false } +bincode = "1" +serde = "1" + +[dependencies.rapier_testbed3d-f64] +path = "../crates/rapier_testbed3d-f64" + +[dependencies.rapier3d-f64] +path = "../crates/rapier3d-f64" + +[[bin]] +name = "all_examples3-f64" +path = "./all_examples3-f64.rs" + +#[lib] +#crate-type = ["cdylib", "rlib"] +#path = "./all_examples3_wasm.rs" + diff --git a/examples3d-f64/all_examples3-f64.rs b/examples3d-f64/all_examples3-f64.rs new file mode 100644 index 0000000..4464d60 --- /dev/null +++ b/examples3d-f64/all_examples3-f64.rs @@ -0,0 +1,67 @@ +#![allow(dead_code)] + +#[cfg(target_arch = "wasm32")] +use wasm_bindgen::prelude::*; +extern crate rapier3d_f64 as rapier3d; + +use inflector::Inflector; + +use rapier_testbed3d::{Testbed, TestbedApp}; +use std::cmp::Ordering; + +mod debug_serialized3; + +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![("(Debug) serialized", debug_serialized3::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-f64/debug_serialized3.rs b/examples3d-f64/debug_serialized3.rs new file mode 100644 index 0000000..e94d7ef --- /dev/null +++ b/examples3d-f64/debug_serialized3.rs @@ -0,0 +1,36 @@ +use rapier3d::prelude::*; +use rapier_testbed3d::Testbed; + +#[derive(serde::Deserialize)] +struct State { + pub islands: IslandManager, + pub broad_phase: BroadPhase, + pub narrow_phase: NarrowPhase, + pub bodies: RigidBodySet, + pub colliders: ColliderSet, + pub impulse_joints: ImpulseJointSet, + pub multibody_joints: MultibodyJointSet, + pub ccd_solver: CCDSolver, +} + +pub fn init_world(testbed: &mut Testbed) { + /* + * Set up the testbed. + */ + let bytes = std::fs::read("state.bin").unwrap(); + let mut state: State = bincode::deserialize(&bytes).unwrap(); + + testbed.set_world( + state.bodies, + state.colliders, + state.impulse_joints, + state.multibody_joints, + ); + testbed.harness_mut().physics.islands = state.islands; + testbed.harness_mut().physics.broad_phase = state.broad_phase; + testbed.harness_mut().physics.narrow_phase = state.narrow_phase; + testbed.harness_mut().physics.ccd_solver = state.ccd_solver; + + testbed.set_graphics_shift(vector![-541.0, -6377257.0, -61.0]); + testbed.look_at(point![10.0, 10.0, 10.0], point![0.0, 0.0, 0.0]); +} |
