From b2cc4449430eba1840dde2c85d192b7305f11074 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Sat, 14 Apr 2018 14:43:21 +0200 Subject: [PATCH] OVR: Add option to reset observer position --- src/libovr/ovr.c | 21 +++++++++++++++++++++ src/libovr/ovr.h | 1 + src/mercenary/main.c | 11 +++++++++++ 3 files changed, 33 insertions(+) diff --git a/src/libovr/ovr.c b/src/libovr/ovr.c index 79fd874..62c2a03 100755 --- a/src/libovr/ovr.c +++ b/src/libovr/ovr.c @@ -99,6 +99,12 @@ static ovrEyeRenderDesc eyeRenderDesc[2]; static ovrPosef hmdToEyeViewPose[2]; static ovrLayerEyeFov layer; static long long frameIndex = 0; +static double observer_x = 0.0; +static double observer_x_normalize = 0.0; +static double observer_y = 0.0; +static double observer_y_normalize = 0.0; +static double observer_z = 0.0; +static double observer_z_normalize = 0.0; int init_ovr(void) { @@ -240,6 +246,14 @@ void begin_render_ovr_eye(int eye) y = layer.RenderPose[eye].Position.y; z = layer.RenderPose[eye].Position.z; + /* normalize height to game's observer, if requrested by user */ + observer_x = x; + x += observer_x_normalize; + observer_y = y; + y += observer_y_normalize; + observer_z = z; + z += observer_z_normalize; + glRotatef(-roll / M_PI * 180.0,0,0,1); glRotatef(-pitch / M_PI * 180.0,1,0,0); glRotatef(-yaw / M_PI * 180.0,0,1,0); @@ -314,6 +328,13 @@ void render_mirror_ovr(int view_width, int view_height) glDisable(GL_TEXTURE_2D); } +void normalize_observer_ovr(void) +{ + observer_x_normalize = -observer_x; + observer_y_normalize = -observer_y; + observer_z_normalize = -observer_z; +} + void exit_ovr(void) { int eye; diff --git a/src/libovr/ovr.h b/src/libovr/ovr.h index 68aa6d5..4b8b8ee 100755 --- a/src/libovr/ovr.h +++ b/src/libovr/ovr.h @@ -6,4 +6,5 @@ void begin_render_ovr_eye(int eye); void end_render_ovr_eye(int eye); void end_render_ovr(void); void render_mirror_ovr(int view_width, int view_height); +void normalize_observer_ovr(void); diff --git a/src/mercenary/main.c b/src/mercenary/main.c index c94708b..8be3591 100644 --- a/src/mercenary/main.c +++ b/src/mercenary/main.c @@ -725,6 +725,14 @@ static void keyboard_sdl(int down, enum keycode keycode) if (config_ctrl_c) quit = 1; break; + case KEYCODE_n: +#ifdef HAVE_OVR + normalize_observer_ovr(); + osd_info("", "change height"); +#else + osd_info("", "not applicable"); +#endif + break; case KEYCODE_KP_PLUS: if (config_fov / 1.2 >= FOV_MIN) config_fov /= 1.2; @@ -1026,6 +1034,9 @@ int main(int argc, char *argv[]) " Press `CTRL' + `A' to toggle audio filter on / off.\n" " Press `CTRL' + `+' or `-' to change field-of-view (OpenGL).\n" " Press `CTRL' + `I' to skip intro (approaching to Eris).\n" +#ifdef HAVE_OVR + " Press `CTRL' + `N' to normalize player position.\n" +#endif "\n" "Answer to a Question:\n" " Press `O' (not Zero) for OK and other key for NO.\n" -- 2.13.6