From 4cd6f84a78b0127a7bb757837ac1fe6b4612ba4f Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Tue, 29 Dec 2020 03:25:59 +0100 Subject: [PATCH] movement commands change the reference in non-perspective --- control.cpp | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/control.cpp b/control.cpp index dcb0b4a5..9c5821fd 100644 --- a/control.cpp +++ b/control.cpp @@ -786,10 +786,25 @@ EX void mainloopiter() { rug::using_rugview urv; dynamicval ds(didsomething, didsomething); using namespace vrhr; - if(vraim_x) full_rotate_camera(0, -vraim_x / 20); - if(vraim_y) full_rotate_camera(1, vraim_y / 20); - if(vrgo_y) full_forward_camera(-vrgo_y / 20); - if(vrgo_x) full_strafe_camera(-vrgo_x / 20); + if(in_perspective_v()) { + if(vraim_x) full_rotate_camera(0, -vraim_x / 20); + if(vraim_y) full_rotate_camera(1, vraim_y / 20); + if(vrgo_y) full_forward_camera(-vrgo_y / 20); + if(vrgo_x) full_strafe_camera(-vrgo_x / 20); + } + else { + E4; + transmatrix T = hmd_at * inverse(hmd_ref_at); + + T = + cspin(0, 2, -vraim_x * camera_speed / 20) * + cspin(1, 2, vraim_y * camera_speed / 20) * + cpush(0, -vrgo_x * camera_speed / 20) * + cpush(2, -vrgo_y * camera_speed / 20) * + T; + + hmd_ref_at = inverse(T) * hmd_at; + } } #endif