From 2da474c484c3edeb4f94a983d165904076564d3f Mon Sep 17 00:00:00 2001 From: James Urquhart Date: Thu, 19 May 2016 22:37:15 +0100 Subject: [PATCH] Always use the latest eye pose data from the HMD --- Engine/source/platform/input/openVR/openVRProvider.cpp | 10 +++++++++- Engine/source/platform/input/openVR/openVRProvider.h | 1 + 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Engine/source/platform/input/openVR/openVRProvider.cpp b/Engine/source/platform/input/openVR/openVRProvider.cpp index 2061403e7..c9b5a33c7 100644 --- a/Engine/source/platform/input/openVR/openVRProvider.cpp +++ b/Engine/source/platform/input/openVR/openVRProvider.cpp @@ -329,6 +329,11 @@ void OpenVRRenderState::reset(vr::IVRSystem* hmd) if (!mHMD) return; + updateHMDProjection(); +} + +void OpenVRRenderState::updateHMDProjection() +{ vr::HmdMatrix34_t mat = mHMD->GetEyeToHeadTransform(vr::Eye_Left); mEyePose[0] = OpenVRUtil::convertSteamVRAffineMatrixToMatrixFPlain(mat); mEyePose[0].inverse(); @@ -911,6 +916,9 @@ void OpenVRProvider::updateTrackedPoses() compositor->WaitGetPoses(mTrackedDevicePose, vr::k_unMaxTrackedDeviceCount, NULL, 0); + // Make sure we're using the latest eye offset in case user has changed IPD + mHMDRenderState.updateHMDProjection(); + mValidPoseCount = 0; for (int nDevice = 0; nDevice < vr::k_unMaxTrackedDeviceCount; ++nDevice) @@ -924,7 +932,7 @@ void OpenVRProvider::updateTrackedPoses() if (nDevice == vr::k_unTrackedDeviceIndex_Hmd) { mHMDRenderState.mHMDPose = mat; - // jaeesu - store the last rotation for temp debugging + // jamesu - store the last rotation for temp debugging MatrixF torqueMat(1); OpenVRUtil::convertTransformFromOVR(mat, torqueMat); gLastMoveRot = AngAxisF(torqueMat); diff --git a/Engine/source/platform/input/openVR/openVRProvider.h b/Engine/source/platform/input/openVR/openVRProvider.h index b690b0941..ec7ca7100 100644 --- a/Engine/source/platform/input/openVR/openVRProvider.h +++ b/Engine/source/platform/input/openVR/openVRProvider.h @@ -135,6 +135,7 @@ struct OpenVRRenderState void renderPreview(); void reset(vr::IVRSystem* hmd); + void updateHMDProjection(); }; class OpenVRProvider : public IDisplayDevice, public IInputDevice