model-converter/src/programs/viewer.rs

115 lines
2.9 KiB
Rust
Raw Normal View History

2018-02-23 15:22:48 +01:00
extern crate glium;
2018-02-26 11:45:53 +01:00
extern crate model_converter;
2018-02-23 15:22:48 +01:00
2018-04-11 17:03:32 +02:00
use std::env;
use std::process::exit;
2018-02-23 15:22:48 +01:00
use glium::Display;
use glium::glutin;
use glium::glutin::{
EventsLoop,
WindowBuilder,
};
use glium::glutin::Event;
use glium::glutin::WindowEvent;
use glium::glutin::VirtualKeyCode;
2018-04-10 15:13:35 +02:00
use model_converter::math::vector::Vector3;
2018-04-11 17:03:32 +02:00
use model_converter::parser::parse_into_model;
2018-02-27 11:42:35 +01:00
use model_converter::renderer::Renderer;
2018-04-10 15:13:35 +02:00
use model_converter::renderer::controls::OrbitControls;
use model_converter::renderer::camera::Camera;
2018-04-11 17:03:32 +02:00
use model_converter::model::Model;
2018-02-26 11:45:53 +01:00
2018-02-23 15:22:48 +01:00
fn main() {
2018-04-11 17:03:32 +02:00
let mut model = Model::new();
let mut inputs = vec![];
let mut iterator = env::args();
// Skip the name of the program
iterator.next();
while let Some(argument) = iterator.next() {
match argument.as_ref() {
"-i" | "--input" => {
if let Some(path) = iterator.next() {
inputs.push(path);
} else {
eprintln!("Expecting path after {}", argument);
exit(-1);
}
},
arg => {
eprintln!("Argument unkown: {}", arg);
exit(-1);
},
}
}
for input in inputs {
if let Err(e) = parse_into_model(&input, &mut model) {
eprintln!("Error while parsing file: {}", e);
exit(1);
}
}
2018-02-26 14:59:32 +01:00
2018-04-12 09:44:32 +02:00
model.center_and_scale();
2018-02-23 15:22:48 +01:00
let mut events_loop = EventsLoop::new();
let window = WindowBuilder::new().with_visibility(false);
2018-02-26 14:59:32 +01:00
let context = glutin::ContextBuilder::new().with_depth_buffer(24);
2018-02-23 15:22:48 +01:00
let display = Display::new(window, context, &events_loop).unwrap();
let mut renderer = Renderer::new(display);
2018-02-23 15:22:48 +01:00
let mut closed = false;
2018-02-26 11:45:53 +01:00
renderer.add_model(&model);
2018-04-10 15:13:35 +02:00
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),
);
2018-02-26 14:59:32 +01:00
2018-04-11 14:13:49 +02:00
let mut controls = OrbitControls::around(&model, &mut camera);
2018-02-23 15:22:48 +01:00
renderer.show();
2018-04-10 15:13:35 +02:00
while !closed {
2018-02-27 11:42:35 +01:00
2018-04-10 15:13:35 +02:00
events_loop.poll_events(|ev| {
2018-02-23 15:22:48 +01:00
2018-04-10 15:13:35 +02:00
use model_converter::renderer::controls::Controls;
controls.manage_event(&ev, &mut camera);
2018-02-23 15:22:48 +01:00
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,
_ => (),
}
});
2018-04-10 15:13:35 +02:00
let mut target = renderer.draw();
renderer.render(&camera, &mut target);
target.finish().unwrap();
2018-02-23 15:22:48 +01:00
}
}