diff options
Diffstat (limited to 'src_testbed')
| -rw-r--r-- | src_testbed/engine.rs | 2 | ||||
| -rw-r--r-- | src_testbed/lib.rs | 4 | ||||
| -rw-r--r-- | src_testbed/nphysics_backend.rs | 7 | ||||
| -rw-r--r-- | src_testbed/objects/heightfield.rs | 17 | ||||
| -rw-r--r-- | src_testbed/objects/polyline.rs | 2 | ||||
| -rw-r--r-- | src_testbed/testbed.rs | 4 |
6 files changed, 23 insertions, 13 deletions
diff --git a/src_testbed/engine.rs b/src_testbed/engine.rs index 040c883..a864cfd 100644 --- a/src_testbed/engine.rs +++ b/src_testbed/engine.rs @@ -501,7 +501,7 @@ impl GraphicsManager { object: DefaultColliderHandle, colliders: &DefaultColliderSet<f32>, delta: Isometry<f32>, - shape: &Cuboid<f32>, + shape: &Cuboid, color: Point3<f32>, out: &mut Vec<Node>, ) { diff --git a/src_testbed/lib.rs b/src_testbed/lib.rs index 5358e7c..0d1483e 100644 --- a/src_testbed/lib.rs +++ b/src_testbed/lib.rs @@ -1,5 +1,9 @@ #[macro_use] extern crate kiss3d; +#[cfg(feature = "dim2")] +extern crate buckler2d as buckler; +#[cfg(feature = "dim3")] +extern crate buckler3d as buckler; extern crate nalgebra as na; #[cfg(feature = "dim2")] extern crate ncollide2d as ncollide; diff --git a/src_testbed/nphysics_backend.rs b/src_testbed/nphysics_backend.rs index e112c22..4384480 100644 --- a/src_testbed/nphysics_backend.rs +++ b/src_testbed/nphysics_backend.rs @@ -1,4 +1,4 @@ -use ncollide::shape::{Ball, Capsule, Cuboid, ShapeHandle}; +use ncollide::shape::{Ball, Capsule, Cuboid, HeightField, ShapeHandle}; use nphysics::force_generator::DefaultForceGeneratorSet; use nphysics::joint::{ DefaultJointConstraintSet, FixedConstraint, PrismaticConstraint, RevoluteConstraint, @@ -187,7 +187,10 @@ fn nphysics_collider_from_rapier_collider( pos *= capsule.transform_wrt_y(); ShapeHandle::new(Capsule::new(capsule.half_height(), capsule.radius)) } else if let Some(heightfield) = shape.as_heightfield() { - ShapeHandle::new(heightfield.clone()) + let heights = heightfield.heights(); + let scale = heightfield.scale(); + let heightfield = HeightField::new(heights.clone(), *scale); + ShapeHandle::new(heightfield) } else { #[cfg(feature = "dim3")] if let Some(trimesh) = shape.as_trimesh() { diff --git a/src_testbed/objects/heightfield.rs b/src_testbed/objects/heightfield.rs index 0815592..977bcca 100644 --- a/src_testbed/objects/heightfield.rs +++ b/src_testbed/objects/heightfield.rs @@ -1,15 +1,16 @@ #[cfg(feature = "dim3")] use crate::objects::node::{self, GraphicsNode}; +use buckler::shape; +use kiss3d::resource::Mesh; use kiss3d::window::Window; use na::{self, Point3}; -use ncollide::shape; -#[cfg(feature = "dim3")] -use ncollide::transformation::ToTriMesh; use rapier::geometry::{ColliderHandle, ColliderSet}; #[cfg(feature = "dim2")] use rapier::math::Point; #[cfg(feature = "dim3")] use rapier::math::Vector; +use std::cell::RefCell; +use std::rc::Rc; pub struct HeightField { color: Point3<f32>, @@ -25,7 +26,7 @@ impl HeightField { #[cfg(feature = "dim2")] pub fn new( collider: ColliderHandle, - heightfield: &shape::HeightField<f32>, + heightfield: &shape::HeightField, color: Point3<f32>, _: &mut Window, ) -> HeightField { @@ -47,16 +48,18 @@ impl HeightField { #[cfg(feature = "dim3")] pub fn new( collider: ColliderHandle, - heightfield: &shape::HeightField<f32>, + heightfield: &shape::HeightField, color: Point3<f32>, window: &mut Window, ) -> HeightField { - let mesh = heightfield.to_trimesh(()); + let (vertices, indices) = heightfield.to_trimesh(); + let indices = indices.into_iter().map(|i| na::convert(i)).collect(); + let mesh = Mesh::new(vertices, indices, None, None, false); let mut res = HeightField { color, base_color: color, - gfx: window.add_trimesh(mesh, Vector::repeat(1.0)), + gfx: window.add_mesh(Rc::new(RefCell::new(mesh)), Vector::repeat(1.0)), collider: collider, }; diff --git a/src_testbed/objects/polyline.rs b/src_testbed/objects/polyline.rs index 77841ae..efb5e95 100644 --- a/src_testbed/objects/polyline.rs +++ b/src_testbed/objects/polyline.rs @@ -1,6 +1,6 @@ +use buckler2d::shape; use kiss3d::window::Window; use na::{Isometry2, Point2, Point3}; -use ncollide2d::shape; use nphysics2d::object::{ColliderAnchor, DefaultColliderHandle, DefaultColliderSet}; pub struct Polyline { diff --git a/src_testbed/testbed.rs b/src_testbed/testbed.rs index 4fac8e1..60fb5d9 100644 --- a/src_testbed/testbed.rs +++ b/src_testbed/testbed.rs @@ -1521,8 +1521,8 @@ fn draw_contacts(window: &mut Window, nf: &NarrowPhase, colliders: &ColliderSet) } else { Point3::new(1.0, 0.0, 0.0) }; - let pos1 = colliders[manifold.pair.collider1].position(); - let pos2 = colliders[manifold.pair.collider2].position(); + let pos1 = colliders[manifold.data.pair.collider1].position(); + let pos2 = colliders[manifold.data.pair.collider2].position(); let start = pos1 * pt.local_p1; let end = pos2 * pt.local_p2; let n = pos1 * manifold.local_n1; |
