From aa36fddb09d2a0eada6c3e1a9062b2d9c3444706 Mon Sep 17 00:00:00 2001 From: _ <> Date: Sun, 12 Jan 2020 19:10:58 +0000 Subject: [PATCH] Got the stem --- src/main.rs | 43 +++++++++++++++---------------------------- 1 file changed, 15 insertions(+), 28 deletions(-) diff --git a/src/main.rs b/src/main.rs index 02546b1..221cdc4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -208,6 +208,8 @@ impl <'a> IqmModel <'a> { meshes }; + //println! ("{:?}", meshes); + let vertexarrays = { let num: usize = header.fields [iqm_consts::NUM_VERTEXARRAYS].try_into ().unwrap (); let mut vertexarrays = Vec::with_capacity (num); @@ -239,16 +241,16 @@ impl <'a> IqmModel <'a> { } pub fn get_vertex_slice (&self, - mesh_index: usize, vertexarray_index: usize + vertexarray_index: usize ) -> &[u8] { let vertexarray = &self.vertexarrays [vertexarray_index]; let bytes_per_float = 4; let stride = bytes_per_float * vertexarray.va_size; + assert_eq! (stride, 12); - let mesh = &self.meshes [mesh_index]; - let offset: usize = (vertexarray.va_offset + stride * mesh.first_vertex).try_into ().unwrap (); - let num_bytes: usize = (stride * mesh.num_vertexes).try_into ().unwrap (); + let offset: usize = (vertexarray.va_offset).try_into ().unwrap (); + let num_bytes: usize = (stride * self.header.fields [iqm_consts::NUM_VERTEXES]).try_into ().unwrap (); &self.data [offset..offset + num_bytes] } @@ -548,9 +550,6 @@ fn main () { }) .collect (); - //println! ("uni_model: {}", unis ["model"]); - //println! ("uni_viewproj: {}", unis ["viewproj"]); - let attrs: HashMap <_, Option > = vec! [ "pos", "uv", @@ -574,19 +573,8 @@ fn main () { }) .collect (); - //println! ("attr_pos: {}", attrs ["pos"]); - - let tri_mesh: Vec = vec! [ - 0.0, 0.0, - 1.0, 0.0, - 1.0, 1.0, - ]; - let model_data = load_small_file ("pumpking.iqm"); let model = IqmModel::from_slice (&model_data [..]); - let vertex_slice = model.get_vertex_slice (0, 0); - let normal_slice = model.get_vertex_slice (0, 2); - let index_slice = model.get_index_slice (0); let id_mat = Mat4::identity (); let view_mat: Vec = vec! [ @@ -595,7 +583,6 @@ fn main () { 0.0, 0.0, 0.3125, 0.0, 0.0, 0.0, 0.0, 1.0, ]; - let indexes: Vec = vec! [0, 1, 2]; const FALSE_U8: u8 = 0; @@ -653,11 +640,11 @@ fn main () { window.gl_make_current (&gl_ctx).unwrap (); let longitude = (frame as f32).to_radians (); - let latitude = (frame as f32 / 5.0).to_radians ().sin () * 45.0f32.to_radians () - 120.0f32.to_radians (); + let latitude = (frame as f32 / 5.0).to_radians ().sin () * 30.0f32.to_radians () - 120.0f32.to_radians (); let model_mat = Mat4::from_rotation_x (latitude) * Mat4::from_rotation_z (longitude) * - Mat4::from_translation (Vec3::from ((0.0, 0.0, -1.0))) + Mat4::from_translation (Vec3::from ((0.0, 0.0, -2.7 * 0.5))) ; let light = Vec4::from ((0.0, 0.0, 0.0, 1.0)); @@ -679,18 +666,18 @@ fn main () { gl::Uniform3fv (unis ["albedo"], 1, &orange as *const Vec3 as *const f32); - vertex_attrib_pointer (attrs ["pos"], 3, model.get_vertex_slice (0, 0)); - vertex_attrib_pointer (attrs ["normal"], 3, model.get_vertex_slice (0, 2)); + vertex_attrib_pointer (attrs ["pos"], 3, model.get_vertex_slice (0)); + vertex_attrib_pointer (attrs ["normal"], 3, model.get_vertex_slice (2)); - gl::DrawElements (gl::TRIANGLES, (model.meshes [0].num_triangles * 3) as i32, gl::UNSIGNED_INT, &index_slice [0] as *const u8 as *const c_void); + gl::DrawElements (gl::TRIANGLES, (model.meshes [0].num_triangles * 3) as i32, gl::UNSIGNED_INT, &model.get_index_slice (0) [0] as *const u8 as *const c_void); - if false { + if true { gl::Uniform3fv (unis ["albedo"], 1, &green as *const Vec3 as *const f32); - vertex_attrib_pointer (attrs ["pos"], 3, model.get_vertex_slice (1, 0)); - vertex_attrib_pointer (attrs ["normal"], 3, model.get_vertex_slice (1, 2)); + vertex_attrib_pointer (attrs ["pos"], 3, model.get_vertex_slice (0)); + vertex_attrib_pointer (attrs ["normal"], 3, model.get_vertex_slice (2)); - gl::DrawElements (gl::TRIANGLES, (model.meshes [1].num_triangles * 3) as i32, gl::UNSIGNED_INT, &index_slice [1] as *const u8 as *const c_void); + gl::DrawElements (gl::TRIANGLES, (model.meshes [1].num_triangles * 3) as i32, gl::UNSIGNED_INT, &model.get_index_slice (1) [0] as *const u8 as *const c_void); } }