From e23bf0af59ab0fc82e15b5080106c44e234edd52 Mon Sep 17 00:00:00 2001 From: _ <_@_> Date: Tue, 22 Feb 2022 00:17:55 +0000 Subject: [PATCH] :construction: wip: write bogus normals --- src/main.rs | 69 ++++++++++++++++++++++++++++++++++------------------- 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/src/main.rs b/src/main.rs index f719bb5..bbf3e2a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,6 +58,11 @@ fn main () { let pos_offset = pos.offset () + pos_view.offset (); let pos_slice = &buffer [pos_offset..(pos_offset + pos.count () * 4 * 3)]; + let norm = prim.get (&gltf::Semantic::Normals).unwrap (); + let pos_view = pos.view ().unwrap (); + let pos_offset = pos.offset () + pos_view.offset (); + let pos_slice = &buffer [pos_offset..(pos_offset + pos.count () * 4 * 3)]; + let first_vertex = vertexes.len (); let mesh = iqm::Mesh { @@ -131,12 +136,14 @@ fn main () { let num_text = u32::try_from (num_text).unwrap (); let num_meshes = u32::try_from (meshes.len ()).unwrap (); - let num_vertexarrays = 1u32; + let num_vertexarrays = 2u32; let header_len = 124u32; let ofs_meshes = header_len; let ofs_vertexarrays = ofs_meshes + num_meshes * 6 * 4; - let ofs_triangles = ofs_vertexarrays + num_vertexarrays * 5 * 4 + num_vertexes * 3 * 4; + // Not part of IQM spec, but I need it for self-care + let ofs_vertexes = ofs_vertexarrays + num_vertexarrays * 5 * 4; + let ofs_triangles = ofs_vertexes + num_vertexes * 3 * 4 + num_vertexes * 3 * 4; let ofs_text = ofs_triangles + num_triangles * 3 * 4; let filesize = ofs_text + num_text; @@ -210,25 +217,39 @@ fn main () { // Vertex arrays - // type - f.write_all (&(0u32.to_le_bytes ())).unwrap (); + for va in [ + iqm::VertexArray { + r#type: 0, + flags: 0, + format: 7, + size: 3, + offset: ofs_vertexes + 0, + }, + iqm::VertexArray { + r#type: 2, + flags: 0, + format: 7, + size: 3, + offset: ofs_vertexes + num_vertexes * 3 * 4, + }, + ] { + f.write_all (&(va.r#type.to_le_bytes ())).unwrap (); + f.write_all (&(va.flags.to_le_bytes ())).unwrap (); + f.write_all (&(va.format.to_le_bytes ())).unwrap (); + f.write_all (&(va.size.to_le_bytes ())).unwrap (); + f.write_all (&(va.offset.to_le_bytes ())).unwrap (); + } - // flags - f.write_all (&(0u32.to_le_bytes ())).unwrap (); + // Vertex position - // format - f.write_all (&(7u32.to_le_bytes ())).unwrap (); - - // size - f.write_all (&(3u32.to_le_bytes ())).unwrap (); - - // offset - f.write_all (&((ofs_vertexarrays + 5 * 4 * 1).to_le_bytes ())).unwrap (); - - // Vertexes - - for t in vertexes { + for t in &vertexes { for x in t { + f.write_all (&(f32::to_le_bytes (*x))).unwrap (); + } + } + + for t in &vertexes { + for x in [0.0, 0.0, 1.0] { f.write_all (&(f32::to_le_bytes (x))).unwrap (); } } @@ -261,12 +282,12 @@ mod iqm { pub num_triangles: u32, } - struct VertexArray { - r#type: u32, - flags: u32, - format: u32, - size: u32, - offset: u32, + pub struct VertexArray { + pub r#type: u32, + pub flags: u32, + pub format: u32, + pub size: u32, + pub offset: u32, } struct Triangle {