From a0bfa246ec15d9a132e13945314afed4b7eef309 Mon Sep 17 00:00:00 2001 From: numzero Date: Sun, 22 Sep 2024 23:54:35 +0300 Subject: [PATCH] Change the coordinate system --- src/bin/wireframe/main.rs | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/src/bin/wireframe/main.rs b/src/bin/wireframe/main.rs index 526aea2..5c74778 100644 --- a/src/bin/wireframe/main.rs +++ b/src/bin/wireframe/main.rs @@ -18,6 +18,11 @@ use winit::{ mod scene; +// The coordinate system: +// * X: forward +// * Y: left +// * Z: up + #[derive(Copy, Clone)] struct Vertex { position: [f32; 3], @@ -114,9 +119,9 @@ fn main() { let scene = prepare_scene(&display); - let rot = Quat::from_euler(glam::EulerRot::YXZ, std::f32::consts::FRAC_PI_4, 0., 0.); + let rot = Quat::from_euler(glam::EulerRot::ZYX, std::f32::consts::FRAC_PI_4, 0., 0.); let mut cur_pos = vec2(0., 0.); - let mut cam_pos = rot * vec3(0., 1., -4.); + let mut cam_pos = rot * vec3(-200., 0., 50.); let mut cam_rot = DragCtl::new(rot); let mut t1 = Instant::now(); @@ -141,25 +146,33 @@ fn main() { let ctl_down = keys_pressed.contains(&PhysicalKey::Code(KeyCode::ShiftLeft)); [ - (ctl_left, vec3(-1., 0., 0.)), - (ctl_right, vec3(1., 0., 0.)), - (ctl_fwd, vec3(0., 0., 1.)), - (ctl_bwd, vec3(0., 0., -1.)), - (ctl_up, vec3(0., 1., 0.)), - (ctl_down, vec3(0., -1., 0.)), + (ctl_left, vec3(0., 1., 0.)), + (ctl_right, vec3(0., -1., 0.)), + (ctl_fwd, vec3(1., 0., 0.)), + (ctl_bwd, vec3(-1., 0., 0.)), + (ctl_up, vec3(0., 0., 1.)), + (ctl_down, vec3(0., 0., -1.)), ] .into_iter() .filter_map(|(ctl, dir)| ctl.then_some(dir)) .sum() }; - cam_pos += 5. * dt * (cam_rot.state() * v); + cam_pos += 100. * dt * (cam_rot.state() * v); let size = window.inner_size(); let size = vec2(size.width as f32, size.height as f32).normalize() * std::f32::consts::SQRT_2; let proj = make_proj_matrix(vec3(size.x, size.y, 2.), (0.125, 1024.125)); - let view = Mat4::from_quat(cam_rot.state().inverse()) + let my_to_gl = mat4( + vec4(0., 0., 1., 0.), + vec4(-1., 0., 0., 0.), + vec4(0., 1., 0., 0.), + vec4(0., 0., 0., 1.), + ); + + let view = my_to_gl + * Mat4::from_quat(cam_rot.state().inverse()) * Mat4::from_translation(-cam_pos); let mut target = display.draw(); @@ -213,7 +226,7 @@ fn main() { cur_pos = vec2(position.x as f32, position.y as f32) / size.length(); cam_rot.on_move(cur_pos, |init, off| { window.request_redraw(); - init * Quat::from_euler(glam::EulerRot::YXZ, -2. * off.x, -2. * off.y, 0.) + init * Quat::from_euler(glam::EulerRot::ZYX, 2. * off.x, -2. * off.y, 0.) }); }