model-converter/src/programs/viewer.rs

78 lines
2.0 KiB
Rust

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();
}
}