OVR: Add option to reset observer position
authorAndreas Eversberg <jolly@eversberg.eu>
Sat, 14 Apr 2018 12:43:21 +0000 (14:43 +0200)
committerAndreas Eversberg <jolly@eversberg.eu>
Sun, 22 Apr 2018 10:02:34 +0000 (12:02 +0200)
src/libovr/ovr.c
src/libovr/ovr.h
src/mercenary/main.c

index 79fd874..62c2a03 100755 (executable)
@@ -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;
index 68aa6d5..4b8b8ee 100755 (executable)
@@ -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);
 
index c94708b..8be3591 100644 (file)
@@ -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"