feat: load and draw helicopter model with separate VAOs for each part

This commit is contained in:
2025-10-02 10:11:04 +02:00
parent ba305c56fd
commit ed0ccb854d

View File

@@ -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 pointparticles
let transform_particles = projection * view * glm::identity();