aboutsummaryrefslogtreecommitdiff
path: root/src_testbed/objects
diff options
context:
space:
mode:
Diffstat (limited to 'src_testbed/objects')
-rw-r--r--src_testbed/objects/ball.rs5
-rw-r--r--src_testbed/objects/box_node.rs5
-rw-r--r--src_testbed/objects/capsule.rs5
-rw-r--r--src_testbed/objects/cone.rs5
-rw-r--r--src_testbed/objects/convex.rs23
-rw-r--r--src_testbed/objects/cylinder.rs5
-rw-r--r--src_testbed/objects/heightfield.rs28
-rw-r--r--src_testbed/objects/mesh.rs7
-rw-r--r--src_testbed/objects/polyline.rs2
9 files changed, 65 insertions, 20 deletions
diff --git a/src_testbed/objects/ball.rs b/src_testbed/objects/ball.rs
index f72c284..df43341 100644
--- a/src_testbed/objects/ball.rs
+++ b/src_testbed/objects/ball.rs
@@ -9,11 +9,13 @@ pub struct Ball {
base_color: Point3<f32>,
gfx: GraphicsNode,
collider: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Ball {
pub fn new(
collider: ColliderHandle,
+ delta: Isometry<f32>,
radius: f32,
color: Point3<f32>,
window: &mut Window,
@@ -28,6 +30,7 @@ impl Ball {
base_color: color,
gfx: node,
collider,
+ delta,
};
// res.gfx.set_texture_from_file(&Path::new("media/kitten.png"), "kitten");
@@ -55,7 +58,7 @@ impl Ball {
colliders,
self.collider,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/box_node.rs b/src_testbed/objects/box_node.rs
index 493ffba..0586d77 100644
--- a/src_testbed/objects/box_node.rs
+++ b/src_testbed/objects/box_node.rs
@@ -9,11 +9,13 @@ pub struct Box {
base_color: Point3<f32>,
gfx: GraphicsNode,
collider: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Box {
pub fn new(
collider: ColliderHandle,
+ delta: Isometry<f32>,
half_extents: Vector<f32>,
color: Point3<f32>,
window: &mut window::Window,
@@ -29,6 +31,7 @@ impl Box {
base_color: color,
gfx: node,
collider,
+ delta,
};
res.gfx.set_color(color.x, color.y, color.z);
@@ -55,7 +58,7 @@ impl Box {
colliders,
self.collider,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/capsule.rs b/src_testbed/objects/capsule.rs
index 23160be..3d3e88f 100644
--- a/src_testbed/objects/capsule.rs
+++ b/src_testbed/objects/capsule.rs
@@ -9,11 +9,13 @@ pub struct Capsule {
base_color: Point3<f32>,
gfx: GraphicsNode,
collider: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Capsule {
pub fn new(
collider: ColliderHandle,
+ delta: Isometry<f32>,
capsule: &geometry::Capsule,
color: Point3<f32>,
window: &mut window::Window,
@@ -30,6 +32,7 @@ impl Capsule {
base_color: color,
gfx: node,
collider,
+ delta: delta * capsule.transform_wrt_y(),
};
res.gfx.set_color(color.x, color.y, color.z);
@@ -50,7 +53,7 @@ impl Capsule {
colliders,
self.collider,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/cone.rs b/src_testbed/objects/cone.rs
index 58b014f..7aa2039 100644
--- a/src_testbed/objects/cone.rs
+++ b/src_testbed/objects/cone.rs
@@ -9,11 +9,13 @@ pub struct Cone {
base_color: Point3<f32>,
gfx: GraphicsNode,
collider: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Cone {
pub fn new(
collider: ColliderHandle,
+ delta: Isometry<f32>,
half_height: f32,
radius: f32,
color: Point3<f32>,
@@ -29,6 +31,7 @@ impl Cone {
base_color: color,
gfx: node,
collider,
+ delta,
};
// res.gfx.set_texture_from_file(&Path::new("media/kitten.png"), "kitten");
@@ -56,7 +59,7 @@ impl Cone {
colliders,
self.collider,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs
index 0347144..95ef74a 100644
--- a/src_testbed/objects/convex.rs
+++ b/src_testbed/objects/convex.rs
@@ -13,25 +13,44 @@ pub struct Convex {
base_color: Point3<f32>,
gfx: GraphicsNode,
body: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Convex {
pub fn new(
body: ColliderHandle,
+ delta: Isometry<f32>,
vertices: Vec<Point<f32>>,
+ #[cfg(feature = "dim3")] indices: Vec<[u32; 3]>,
color: Point3<f32>,
window: &mut Window,
) -> Convex {
#[cfg(feature = "dim2")]
let node = window.add_convex_polygon(vertices, Vector::from_element(1.0));
#[cfg(feature = "dim3")]
- let node = unimplemented!();
+ let node = {
+ use std::cell::RefCell;
+ use std::rc::Rc;
+ let mut mesh_vertices = Vec::new();
+ let mut mesh_indices = Vec::new();
+ for idx in indices {
+ let i = mesh_vertices.len() as u16;
+ mesh_vertices.push(vertices[idx[0] as usize]);
+ mesh_vertices.push(vertices[idx[1] as usize]);
+ mesh_vertices.push(vertices[idx[2] as usize]);
+ mesh_indices.push(Point3::new(i, i + 1, i + 2));
+ }
+
+ let mesh = kiss3d::resource::Mesh::new(mesh_vertices, mesh_indices, None, None, false);
+ window.add_mesh(Rc::new(RefCell::new(mesh)), na::Vector3::from_element(1.0))
+ };
let mut res = Convex {
color,
base_color: color,
gfx: node,
body,
+ delta,
};
// res.gfx.set_texture_from_file(&Path::new("media/kitten.png"), "kitten");
@@ -59,7 +78,7 @@ impl Convex {
colliders,
self.body,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/cylinder.rs b/src_testbed/objects/cylinder.rs
index 01a6737..ff4dc72 100644
--- a/src_testbed/objects/cylinder.rs
+++ b/src_testbed/objects/cylinder.rs
@@ -9,11 +9,13 @@ pub struct Cylinder {
base_color: Point3<f32>,
gfx: GraphicsNode,
collider: ColliderHandle,
+ delta: Isometry<f32>,
}
impl Cylinder {
pub fn new(
collider: ColliderHandle,
+ delta: Isometry<f32>,
half_height: f32,
radius: f32,
color: Point3<f32>,
@@ -29,6 +31,7 @@ impl Cylinder {
base_color: color,
gfx: node,
collider,
+ delta,
};
// res.gfx.set_texture_from_file(&Path::new("media/kitten.png"), "kitten");
@@ -56,7 +59,7 @@ impl Cylinder {
colliders,
self.collider,
&self.color,
- &Isometry::identity(),
+ &self.delta,
);
}
diff --git a/src_testbed/objects/heightfield.rs b/src_testbed/objects/heightfield.rs
index 0815592..cb5edf3 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 cdl::shape;
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 {
+ crate::objects::node::{self, GraphicsNode},
+ kiss3d::resource::Mesh,
+ rapier::math::Vector,
+ std::cell::RefCell,
+};
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,23 @@ 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(());
+ use std::rc::Rc;
+
+ let (vertices, indices) = heightfield.to_trimesh();
+ let indices = indices
+ .into_iter()
+ .map(|idx| Point3::new(idx[0] as u16, idx[1] as u16, idx[2] as u16))
+ .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/mesh.rs b/src_testbed/objects/mesh.rs
index 5187a8b..5505de3 100644
--- a/src_testbed/objects/mesh.rs
+++ b/src_testbed/objects/mesh.rs
@@ -17,12 +17,15 @@ impl Mesh {
pub fn new(
collider: ColliderHandle,
vertices: Vec<Point<f32>>,
- indices: Vec<Point3<u32>>,
+ indices: Vec<[u32; 3]>,
color: Point3<f32>,
window: &mut window::Window,
) -> Mesh {
let vs = vertices;
- let is = indices.into_iter().map(na::convert).collect();
+ let is = indices
+ .into_iter()
+ .map(|idx| Point3::new(idx[0] as u16, idx[1] as u16, idx[2] as u16))
+ .collect();
let mesh;
let gfx;
diff --git a/src_testbed/objects/polyline.rs b/src_testbed/objects/polyline.rs
index 77841ae..a7422b3 100644
--- a/src_testbed/objects/polyline.rs
+++ b/src_testbed/objects/polyline.rs
@@ -1,6 +1,6 @@
+use cdl2d::shape;
use kiss3d::window::Window;
use na::{Isometry2, Point2, Point3};
-use ncollide2d::shape;
use nphysics2d::object::{ColliderAnchor, DefaultColliderHandle, DefaultColliderSet};
pub struct Polyline {