mesh display: allow switching perspective/orthographic in runtime
This commit is contained in:
parent
db50127cf5
commit
c1b7d5ea00
|
|
@ -1,12 +1,14 @@
|
|||
use glam::*;
|
||||
use refraction::mesh_loader::load_mesh;
|
||||
use refraction::mesh_tracer::{trace_to_mesh, Mesh};
|
||||
use show_image::event::{ElementState, VirtualKeyCode, WindowEvent};
|
||||
use show_image::{exit, ImageInfo, ImageView, WindowOptions};
|
||||
use std::env;
|
||||
use std::error::Error;
|
||||
use std::f32::consts::PI;
|
||||
use std::fs::File;
|
||||
use std::io::BufReader;
|
||||
use std::sync::atomic::{AtomicUsize, Ordering::Relaxed};
|
||||
|
||||
const W: i32 = 320;
|
||||
const H: i32 = 240;
|
||||
|
|
@ -109,6 +111,10 @@ fn test_projs() {
|
|||
check(ortho, 9., 1., 8.);
|
||||
}
|
||||
|
||||
// add_event_handler wants 'static + Send. Let it be so.
|
||||
static PROJ_INDEX: AtomicUsize = AtomicUsize::new(0);
|
||||
static PROJS: [fn(dist: f32, off: Vec2) -> (Vec3, Vec3); 2] = [persp, ortho];
|
||||
|
||||
#[show_image::main]
|
||||
fn main() -> Result<(), Box<dyn Error>> {
|
||||
let args: Vec<String> = env::args().collect();
|
||||
|
|
@ -121,10 +127,20 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||
let mut f = BufReader::new(f);
|
||||
load_mesh(&mut f)?
|
||||
};
|
||||
let proj = persp;
|
||||
let window = show_image::create_window("Raytracing", WindowOptions::default())?;
|
||||
window.add_event_handler(|_wnd, ev, _ctl| {
|
||||
if let WindowEvent::KeyboardInput(ev) = ev {
|
||||
if ev.input.state != ElementState::Pressed {
|
||||
return;
|
||||
}
|
||||
if let Some(VirtualKeyCode::Tab) = ev.input.key_code {
|
||||
PROJ_INDEX.store((PROJ_INDEX.load(Relaxed) + 1) % PROJS.len(), Relaxed);
|
||||
}
|
||||
}
|
||||
})?;
|
||||
loop {
|
||||
for phi in 0..360 {
|
||||
let proj = PROJS[PROJ_INDEX.load(Relaxed)];
|
||||
let m_view = ypr_to_mat(vec3(
|
||||
(135.0 + phi as f32) * PI / 180.0,
|
||||
-30.0 * PI / 180.0,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user