extern crate glium; extern crate model_converter; use glium::Display; use glium::glutin; use glium::glutin::{ EventsLoop, WindowBuilder, }; use glium::glutin::Event; use glium::glutin::WindowEvent; use glium::glutin::VirtualKeyCode; use model_converter::math::vector::Vector3; use model_converter::parser::{parse, parse_into_model}; use model_converter::renderer::Renderer; use model_converter::renderer::controls::OrbitControls; use model_converter::renderer::camera::Camera; fn main() { let mut model = parse("./assets/models/cube/cube.mtl").unwrap(); parse_into_model("./assets/models/cube/cube.obj", &mut model).unwrap(); let mut events_loop = EventsLoop::new(); let window = WindowBuilder::new(); let context = glutin::ContextBuilder::new().with_depth_buffer(24); let display = Display::new(window, context, &events_loop).unwrap(); let mut closed = false; let mut renderer = Renderer::new(display); renderer.add_model(&model); let mut camera = Camera::new( Vector3::new( 0.0, 0.0, 0.0), Vector3::new( 0.0, 0.0, 0.0), Vector3::new( 0.0, 1.0, 0.0), ); let mut controls = OrbitControls::new(&mut camera); while !closed { events_loop.poll_events(|ev| { use model_converter::renderer::controls::Controls; controls.manage_event(&ev, &mut camera); match ev { // Close window Event::WindowEvent { event: WindowEvent::Closed, .. } => closed = true, // Escape key Event::WindowEvent { event: WindowEvent::KeyboardInput { input: glutin::KeyboardInput { virtual_keycode: Some(VirtualKeyCode::Escape), .. }, .. }, .. } => closed = true, _ => (), } }); let mut target = renderer.draw(); renderer.render(&camera, &mut target); target.finish().unwrap(); } }