diff options
Diffstat (limited to 'src_testbed/objects/convex.rs')
| -rw-r--r-- | src_testbed/objects/convex.rs | 23 |
1 files changed, 21 insertions, 2 deletions
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, ); } |
