From 486fbd972f7951edf2d576c7c6bcbd02dcc28011 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Mon, 21 Dec 2020 16:01:22 +0100 Subject: Add example for 3D convex polyhedron. --- src_testbed/objects/convex.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'src_testbed/objects/convex.rs') diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs index 0347144..9f0983d 100644 --- a/src_testbed/objects/convex.rs +++ b/src_testbed/objects/convex.rs @@ -19,13 +19,20 @@ impl Convex { pub fn new( body: ColliderHandle, vertices: Vec>, + #[cfg(feature = "dim3")] indices: Vec>, color: Point3, 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 is = indices.into_iter().map(na::convert).collect(); + let mesh = kiss3d::resource::Mesh::new(vertices, is, None, None, false); + window.add_mesh(Rc::new(RefCell::new(mesh)), na::Vector3::from_element(1.0)) + }; let mut res = Convex { color, -- cgit From 00da4aaa42cc921bbd8c469b45c5c1e304f46260 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Tue, 5 Jan 2021 15:34:48 +0100 Subject: Add compound shape support. --- src_testbed/objects/convex.rs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src_testbed/objects/convex.rs') diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs index 9f0983d..b0e0bbb 100644 --- a/src_testbed/objects/convex.rs +++ b/src_testbed/objects/convex.rs @@ -5,7 +5,7 @@ use crate::math::Vector; use crate::math::{Isometry, Point}; use crate::objects::node::{self, GraphicsNode}; use kiss3d::window::Window; -use na::Point3; +use na::{Isometry3, Point3}; use rapier::geometry::{ColliderHandle, ColliderSet}; pub struct Convex { @@ -13,11 +13,13 @@ pub struct Convex { base_color: Point3, gfx: GraphicsNode, body: ColliderHandle, + delta: Isometry3, } impl Convex { pub fn new( body: ColliderHandle, + delta: Isometry3, vertices: Vec>, #[cfg(feature = "dim3")] indices: Vec>, color: Point3, @@ -39,6 +41,7 @@ impl Convex { base_color: color, gfx: node, body, + delta, }; // res.gfx.set_texture_from_file(&Path::new("media/kitten.png"), "kitten"); @@ -66,7 +69,7 @@ impl Convex { colliders, self.body, &self.color, - &Isometry::identity(), + &self.delta, ); } -- cgit From 261ed1ebed04fb594f612b66811350f63b73f104 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 6 Jan 2021 12:53:26 +0100 Subject: Fix 2D compilation. --- src_testbed/objects/convex.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src_testbed/objects/convex.rs') diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs index b0e0bbb..3f68367 100644 --- a/src_testbed/objects/convex.rs +++ b/src_testbed/objects/convex.rs @@ -5,7 +5,7 @@ use crate::math::Vector; use crate::math::{Isometry, Point}; use crate::objects::node::{self, GraphicsNode}; use kiss3d::window::Window; -use na::{Isometry3, Point3}; +use na::Point3; use rapier::geometry::{ColliderHandle, ColliderSet}; pub struct Convex { @@ -13,13 +13,13 @@ pub struct Convex { base_color: Point3, gfx: GraphicsNode, body: ColliderHandle, - delta: Isometry3, + delta: Isometry, } impl Convex { pub fn new( body: ColliderHandle, - delta: Isometry3, + delta: Isometry, vertices: Vec>, #[cfg(feature = "dim3")] indices: Vec>, color: Point3, -- cgit From e2006599a8fa90090393ff4fed326ee78fd7c0b7 Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 20 Jan 2021 15:15:03 +0100 Subject: Add 3D convex decomposition example. --- src_testbed/objects/convex.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src_testbed/objects/convex.rs') diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs index 3f68367..51b1cb4 100644 --- a/src_testbed/objects/convex.rs +++ b/src_testbed/objects/convex.rs @@ -31,8 +31,17 @@ impl Convex { let node = { use std::cell::RefCell; use std::rc::Rc; - let is = indices.into_iter().map(na::convert).collect(); - let mesh = kiss3d::resource::Mesh::new(vertices, is, None, None, false); + 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.x as usize]); + mesh_vertices.push(vertices[idx.y as usize]); + mesh_vertices.push(vertices[idx.z 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)) }; -- cgit From 28b7866aee68ca844406bea4761d630a7913188d Mon Sep 17 00:00:00 2001 From: Crozet Sébastien Date: Wed, 20 Jan 2021 15:40:00 +0100 Subject: Switch to [u32; DIM] instead of Point for element indices. --- src_testbed/objects/convex.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src_testbed/objects/convex.rs') diff --git a/src_testbed/objects/convex.rs b/src_testbed/objects/convex.rs index 51b1cb4..95ef74a 100644 --- a/src_testbed/objects/convex.rs +++ b/src_testbed/objects/convex.rs @@ -21,7 +21,7 @@ impl Convex { body: ColliderHandle, delta: Isometry, vertices: Vec>, - #[cfg(feature = "dim3")] indices: Vec>, + #[cfg(feature = "dim3")] indices: Vec<[u32; 3]>, color: Point3, window: &mut Window, ) -> Convex { @@ -35,9 +35,9 @@ impl Convex { let mut mesh_indices = Vec::new(); for idx in indices { let i = mesh_vertices.len() as u16; - mesh_vertices.push(vertices[idx.x as usize]); - mesh_vertices.push(vertices[idx.y as usize]); - mesh_vertices.push(vertices[idx.z as usize]); + 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)); } -- cgit