diff --git a/lib/rbx_loader/src/primitives.rs b/lib/rbx_loader/src/primitives.rs index 8dbb7ac01..00d6d153d 100644 --- a/lib/rbx_loader/src/primitives.rs +++ b/lib/rbx_loader/src/primitives.rs @@ -51,22 +51,6 @@ pub enum WedgeFace{ Left, Bottom, } -const WEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[ - vec3::int( 1, 0, 0),//Wedge::Right - vec3::int( 0, 1,-1),//Wedge::TopFront - vec3::int( 0, 0, 1),//Wedge::Back - vec3::int(-1, 0, 0),//Wedge::Left - vec3::int( 0,-1, 0),//Wedge::Bottom -]; -/* -local cornerWedgeVerticies = { - Vector3.new(-1/2,-1/2,-1/2),7 - Vector3.new(-1/2,-1/2, 1/2),0 - Vector3.new( 1/2,-1/2,-1/2),6 - Vector3.new( 1/2,-1/2, 1/2),1 - Vector3.new( 1/2, 1/2,-1/2),5 -} -*/ #[derive(Hash,PartialEq,Eq)] pub enum CornerWedgeFace{ Right, @@ -75,13 +59,6 @@ pub enum CornerWedgeFace{ Bottom, Front, } -const CORNERWEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[ - vec3::int( 1, 0, 0),//CornerWedge::Right - vec3::int( 0, 1, 1),//CornerWedge::BackTop - vec3::int(-1, 1, 0),//CornerWedge::LeftTop - vec3::int( 0,-1, 0),//CornerWedge::Bottom - vec3::int( 0, 0,-1),//CornerWedge::Front -]; #[derive(Default)] pub struct CubeFaceDescription([Option<FaceDescription>;6]); impl CubeFaceDescription{ @@ -92,16 +69,6 @@ impl CubeFaceDescription{ self.0.into_iter().enumerate().filter_map(|(i,v)|v.map(|u|(i,u))) } } -pub fn unit_cube(render:RenderConfigId)->Mesh{ - let mut t=CubeFaceDescription::default(); - t.insert(CubeFace::Right,FaceDescription::new_with_render_id(render)); - t.insert(CubeFace::Top,FaceDescription::new_with_render_id(render)); - t.insert(CubeFace::Back,FaceDescription::new_with_render_id(render)); - t.insert(CubeFace::Left,FaceDescription::new_with_render_id(render)); - t.insert(CubeFace::Bottom,FaceDescription::new_with_render_id(render)); - t.insert(CubeFace::Front,FaceDescription::new_with_render_id(render)); - generate_partial_unit_cube(t) -} #[derive(Default)] pub struct WedgeFaceDescription([Option<FaceDescription>;5]); impl WedgeFaceDescription{ @@ -112,15 +79,6 @@ impl WedgeFaceDescription{ self.0.into_iter().enumerate().filter_map(|v|v.1.map(|u|(v.0,u))) } } -// pub fn unit_wedge(render:RenderConfigId)->Mesh{ -// let mut t=WedgeFaceDescription::default(); -// t.insert(WedgeFace::Right,FaceDescription::new_with_render_id(render)); -// t.insert(WedgeFace::TopFront,FaceDescription::new_with_render_id(render)); -// t.insert(WedgeFace::Back,FaceDescription::new_with_render_id(render)); -// t.insert(WedgeFace::Left,FaceDescription::new_with_render_id(render)); -// t.insert(WedgeFace::Bottom,FaceDescription::new_with_render_id(render)); -// generate_partial_unit_wedge(t) -// } #[derive(Default)] pub struct CornerWedgeFaceDescription([Option<FaceDescription>;5]); impl CornerWedgeFaceDescription{ @@ -131,15 +89,6 @@ impl CornerWedgeFaceDescription{ self.0.into_iter().enumerate().filter_map(|v|v.1.map(|u|(v.0,u))) } } -// pub fn unit_cornerwedge(render:RenderConfigId)->Mesh{ -// let mut t=CornerWedgeFaceDescription::default(); -// t.insert(CornerWedgeFace::Right,FaceDescription::new_with_render_id(render)); -// t.insert(CornerWedgeFace::TopBack,FaceDescription::new_with_render_id(render)); -// t.insert(CornerWedgeFace::TopLeft,FaceDescription::new_with_render_id(render)); -// t.insert(CornerWedgeFace::Bottom,FaceDescription::new_with_render_id(render)); -// t.insert(CornerWedgeFace::Front,FaceDescription::new_with_render_id(render)); -// generate_partial_unit_cornerwedge(t) -// } #[derive(Clone)] pub struct FaceDescription{ @@ -157,48 +106,48 @@ impl FaceDescription{ } } pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ - const CUBE_DEFAULT_POLYS:[[[u32;3];4];6]=[ + const CUBE_DEFAULT_POLYS:[[[u32;2];4];6]=[ // right (1, 0, 0) [ - [6,2,0],//[vertex,tex,norm] - [5,1,0], - [2,0,0], - [1,3,0], + [6,2],//[vertex,tex] + [5,1], + [2,0], + [1,3], ], // top (0, 1, 0) [ - [5,3,1], - [4,2,1], - [3,1,1], - [2,0,1], + [5,3], + [4,2], + [3,1], + [2,0], ], // back (0, 0, 1) [ - [0,3,2], - [1,2,2], - [2,1,2], - [3,0,2], + [0,3], + [1,2], + [2,1], + [3,0], ], // left (-1, 0, 0) [ - [0,2,3], - [3,1,3], - [4,0,3], - [7,3,3], + [0,2], + [3,1], + [4,0], + [7,3], ], // bottom (0,-1, 0) [ - [1,1,4], - [0,0,4], - [7,3,4], - [6,2,4], + [1,1], + [0,0], + [7,3], + [6,2], ], // front (0, 0,-1) [ - [4,1,5], - [5,0,5], - [6,3,5], - [7,2,5], + [4,1], + [5,0], + [6,3], + [7,2], ], ]; let mut generated_pos=Vec::new(); @@ -238,8 +187,8 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ //push vertices as they are needed let group_id=PolygonGroupId::new(polygon_groups.len() as u32); polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![ - CUBE_DEFAULT_POLYS[face_id].map(|tup|{ - let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize]; + CUBE_DEFAULT_POLYS[face_id].map(|[pos_id,tex_id]|{ + let pos=CUBE_DEFAULT_VERTICES[pos_id as usize]; let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){ pos_index }else{ @@ -251,7 +200,7 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ //always push vertex let vertex=IndexedVertex{ pos:PositionId::new(pos_index), - tex:TextureCoordinateId::new(tup[1]+4*transform_index), + tex:TextureCoordinateId::new(tex_id+4*transform_index), normal:NormalId::new(normal_index), color:ColorId::new(color_index), }; @@ -279,41 +228,48 @@ pub fn generate_partial_unit_cube(face_descriptions:CubeFaceDescription)->Mesh{ } //don't think too hard about the copy paste because this is all going into the map tool eventually... pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh{ - const WEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[ + const WEDGE_DEFAULT_POLYS:[&[[u32;2]];5]=[ // right (1, 0, 0) &[ - [6,2,0],//[vertex,tex,norm] - [2,0,0], - [1,3,0], + [6,2],//[vertex,tex] + [2,0], + [1,3], ], // FrontTop (0, 1, -1) &[ - [3,1,1], - [2,0,1], - [6,3,1], - [7,2,1], + [3,1], + [2,0], + [6,3], + [7,2], ], // back (0, 0, 1) &[ - [0,3,2], - [1,2,2], - [2,1,2], - [3,0,2], + [0,3], + [1,2], + [2,1], + [3,0], ], // left (-1, 0, 0) &[ - [0,2,3], - [3,1,3], - [7,3,3], + [0,2], + [3,1], + [7,3], ], // bottom (0,-1, 0) &[ - [1,1,4], - [0,0,4], - [7,3,4], - [6,2,4], + [1,1], + [0,0], + [7,3], + [6,2], ], ]; + const WEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[ + vec3::int( 1, 0, 0),//Wedge::Right + vec3::int( 0, 1,-1),//Wedge::TopFront + vec3::int( 0, 0, 1),//Wedge::Back + vec3::int(-1, 0, 0),//Wedge::Left + vec3::int( 0,-1, 0),//Wedge::Bottom + ]; let mut generated_pos=Vec::new(); let mut generated_tex=Vec::new(); let mut generated_normal=Vec::new(); @@ -351,8 +307,8 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh //push vertices as they are needed let group_id=PolygonGroupId::new(polygon_groups.len() as u32); polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![ - WEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{ - let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize]; + WEDGE_DEFAULT_POLYS[face_id].iter().map(|&[pos_id,tex_id]|{ + let pos=CUBE_DEFAULT_VERTICES[pos_id as usize]; let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){ pos_index }else{ @@ -364,7 +320,7 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh //always push vertex let vertex=IndexedVertex{ pos:PositionId::new(pos_index), - tex:TextureCoordinateId::new(tup[1]+4*transform_index), + tex:TextureCoordinateId::new(tex_id+4*transform_index), normal:NormalId::new(normal_index), color:ColorId::new(color_index), }; @@ -392,39 +348,46 @@ pub fn generate_partial_unit_wedge(face_descriptions:WedgeFaceDescription)->Mesh } pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescription)->Mesh{ - const CORNERWEDGE_DEFAULT_POLYS:[&[[u32;3]];5]=[ + const CORNERWEDGE_DEFAULT_POLYS:[&[[u32;2]];5]=[ // right (1, 0, 0) &[ - [6,2,0],//[vertex,tex,norm] - [5,1,0], - [1,3,0], + [6,2],//[vertex,tex] + [5,1], + [1,3], ], // BackTop (0, 1, 1) &[ - [5,3,1], - [0,1,1], - [1,0,1], + [5,3], + [0,1], + [1,0], ], // LeftTop (-1, 1, 0) &[ - [5,3,2], - [7,2,2], - [0,1,2], + [5,3], + [7,2], + [0,1], ], // bottom (0,-1, 0) &[ - [1,1,3], - [0,0,3], - [7,3,3], - [6,2,3], + [1,1], + [0,0], + [7,3], + [6,2], ], // front (0, 0,-1) &[ - [5,0,4], - [6,3,4], - [7,2,4], + [5,0], + [6,3], + [7,2], ], ]; + const CORNERWEDGE_DEFAULT_NORMALS:[Planar64Vec3;5]=[ + vec3::int( 1, 0, 0),//CornerWedge::Right + vec3::int( 0, 1, 1),//CornerWedge::BackTop + vec3::int(-1, 1, 0),//CornerWedge::LeftTop + vec3::int( 0,-1, 0),//CornerWedge::Bottom + vec3::int( 0, 0,-1),//CornerWedge::Front + ]; let mut generated_pos=Vec::new(); let mut generated_tex=Vec::new(); let mut generated_normal=Vec::new(); @@ -462,8 +425,8 @@ pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescri //push vertices as they are needed let group_id=PolygonGroupId::new(polygon_groups.len() as u32); polygon_groups.push(PolygonGroup::PolygonList(PolygonList::new(vec![ - CORNERWEDGE_DEFAULT_POLYS[face_id].iter().map(|tup|{ - let pos=CUBE_DEFAULT_VERTICES[tup[0] as usize]; + CORNERWEDGE_DEFAULT_POLYS[face_id].iter().map(|&[pos_id,tex_id]|{ + let pos=CUBE_DEFAULT_VERTICES[pos_id as usize]; let pos_index=if let Some(pos_index)=generated_pos.iter().position(|&p|p==pos){ pos_index }else{ @@ -475,7 +438,7 @@ pub fn generate_partial_unit_cornerwedge(face_descriptions:CornerWedgeFaceDescri //always push vertex let vertex=IndexedVertex{ pos:PositionId::new(pos_index), - tex:TextureCoordinateId::new(tup[1]+4*transform_index), + tex:TextureCoordinateId::new(tex_id+4*transform_index), normal:NormalId::new(normal_index), color:ColorId::new(color_index), };