feat: load and draw helicopter model with separate VAOs for each part
This commit is contained in:
18
src/main.rs
18
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();
|
||||
|
||||
Reference in New Issue
Block a user