From ed0ccb854d098a7f8ee75c655b774e784ac6260a Mon Sep 17 00:00:00 2001 From: Adrian G L Date: Thu, 2 Oct 2025 10:11:04 +0200 Subject: [PATCH] feat: load and draw helicopter model with separate VAOs for each part --- src/main.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main.rs b/src/main.rs index c5411b7..52b52e0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -199,6 +199,12 @@ fn main() { let terrain_vao = unsafe { create_vao(&terrain_mesh.vertices, &terrain_mesh.normals, &terrain_mesh.colors, &terrain_mesh.indices) }; + // helicopter VAOs + let helicopter = mesh::Helicopter::load("resources/helicopter.obj"); + let heli_body_vao = unsafe { create_vao(&helicopter.body.vertices, &helicopter.body.normals, &helicopter.body.colors, &helicopter.body.indices) }; + let heli_door_vao = unsafe { create_vao(&helicopter.door.vertices, &helicopter.door.normals, &helicopter.door.colors, &helicopter.door.indices) }; + let heli_main_rotor_vao = unsafe { create_vao(&helicopter.main_rotor.vertices, &helicopter.main_rotor.normals, &helicopter.main_rotor.colors, &helicopter.main_rotor.indices) }; + let heli_tail_rotor_vao = unsafe { create_vao(&helicopter.tail_rotor.vertices, &helicopter.tail_rotor.normals, &helicopter.tail_rotor.colors, &helicopter.tail_rotor.indices) }; let vertices = vec![ // triangle 1 @@ -392,6 +398,18 @@ fn main() { gl::UNSIGNED_INT, std::ptr::null(), ); + // Draw helicopter parts + let model_heli: glm::Mat4 = glm::identity(); + let transform_heli = projection * view * model_heli; + gl::UniformMatrix4fv(transform_loc, 1, gl::FALSE, transform_heli.as_ptr()); + gl::BindVertexArray(heli_body_vao); + gl::DrawElements(gl::TRIANGLES, helicopter.body.index_count, gl::UNSIGNED_INT, std::ptr::null()); + gl::BindVertexArray(heli_door_vao); + gl::DrawElements(gl::TRIANGLES, helicopter.door.index_count, gl::UNSIGNED_INT, std::ptr::null()); + gl::BindVertexArray(heli_main_rotor_vao); + gl::DrawElements(gl::TRIANGLES, helicopter.main_rotor.index_count, gl::UNSIGNED_INT, std::ptr::null()); + gl::BindVertexArray(heli_tail_rotor_vao); + gl::DrawElements(gl::TRIANGLES, helicopter.tail_rotor.index_count, gl::UNSIGNED_INT, std::ptr::null()); // Draw point‐particles let transform_particles = projection * view * glm::identity();