OVR: Add option to reset observer position
[mercenary-reloaded.git] / src / libovr / ovr.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;