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;
|
2018-04-12 17:23:40 +02:00
|
|
|
use model_converter::renderer::controls::FirstPersonControls;
|
2018-04-10 15:13:35 +02:00
|
|
|
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();
|
2018-04-11 17:11:55 +02:00
|
|
|
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();
|
2018-04-11 17:11:55 +02:00
|
|
|
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-12 17:23:40 +02:00
|
|
|
camera.z_near = 0.00001;
|
|
|
|
|
|
|
|
let mut controls = FirstPersonControls::new();
|
2018-02-23 15:22:48 +01:00
|
|
|
|
2018-04-11 17:11:55 +02:00
|
|
|
renderer.show();
|
|
|
|
|
2018-04-12 17:23:40 +02:00
|
|
|
use model_converter::renderer::controls::Controls;
|
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-12 17:23:40 +02:00
|
|
|
controls.manage_event(&ev, &mut camera, &renderer);
|
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
|
|
|
|
2018-04-12 17:23:40 +02:00
|
|
|
controls.update(&mut camera, &renderer);
|
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
|
|
|
}
|
|
|
|
}
|