From ac1368c50964035ee0ba6c748a43ea3caaaba8c8 Mon Sep 17 00:00:00 2001 From: Adrian G L Date: Thu, 2 Oct 2025 10:14:51 +0200 Subject: [PATCH] feat: create scene graph with terrain and helicopter nodes in main.rs --- src/main.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/main.rs b/src/main.rs index 52b52e0..53c542d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -15,6 +15,8 @@ use std::{mem, os::raw::c_void, ptr}; mod shader; mod util; mod mesh; +mod scene_graph; +use scene_graph::SceneNode; use glutin::event::{ DeviceEvent, @@ -206,6 +208,24 @@ fn main() { 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) }; + // Scene Graph setup + let root_node = SceneNode::new(); + let terrain_node = SceneNode::from_vao(terrain_vao, terrain_mesh.index_count); + root_node.add_child(&*terrain_node); + + let heli_root = SceneNode::new(); + let body_node = SceneNode::from_vao(heli_body_vao, helicopter.body.index_count); + let door_node = SceneNode::from_vao(heli_door_vao, helicopter.door.index_count); + let main_rotor_node = SceneNode::from_vao(heli_main_rotor_vao, helicopter.main_rotor.index_count); + let tail_rotor_node = SceneNode::from_vao(heli_tail_rotor_vao, helicopter.tail_rotor.index_count); + + heli_root.add_child(&*body_node); + heli_root.add_child(&*door_node); + heli_root.add_child(&*main_rotor_node); + heli_root.add_child(&*tail_rotor_node); + + terrain_node.add_child(&*heli_root); + let vertices = vec![ // triangle 1 -0.8, -0.8, 0.0,