aboutsummaryrefslogtreecommitdiffstats
path: root/Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp')
-rw-r--r--Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp b/Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp
index 74a46e5..0bc50ed 100644
--- a/Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp
+++ b/Samples/OculusRoomTiny/Win32_OculusRoomTiny.cpp
@@ -33,7 +33,7 @@ limitations under the License.
// Choose whether the SDK performs rendering/distortion, or the application.
#define SDK_RENDER 1 //Do NOT switch until you have viewed and understood the Health and Safety message.
//Disabling this makes it a non-compliant app, and not suitable for demonstration. In place for development only.
-const bool FullScreen = true; //Should be true for correct timing. Use false for debug only.
+const bool FullScreen = true; // Set to false for direct mode (recommended), true for extended mode operation.
// Include Non-SDK supporting Utilities from other files
@@ -44,7 +44,7 @@ bool Util_RespondToControls (float & EyeYaw, Vector3f & EyePos, Quatf Pos
void PopulateRoomScene (Scene* scene, RenderDevice* render);
//Structures for the application
-ovrHmd HMD;
+ovrHmd HMD = 0;
ovrEyeRenderDesc EyeRenderDesc[2];
ovrRecti EyeRenderViewport[2];
RenderDevice* pRender = 0;
@@ -69,14 +69,17 @@ int Init()
{
// Initializes LibOVR, and the Rift
ovr_Initialize();
- HMD = ovrHmd_Create(0);
if (!HMD)
{
- MessageBoxA(NULL,"Oculus Rift not detected.","", MB_OK);
- return(1);
+ HMD = ovrHmd_Create(0);
+ if (!HMD)
+ {
+ MessageBoxA(NULL, "Oculus Rift not detected.", "", MB_OK);
+ return(1);
+ }
+ if (HMD->ProductName[0] == '\0')
+ MessageBoxA(NULL, "Rift detected, display not enabled.", "", MB_OK);
}
- if (HMD->ProductName[0] == '\0')
- MessageBoxA(NULL,"Rift detected, display not enabled.","", MB_OK);
//Setup Window and Graphics - use window frame if relying on Oculus driver
const int backBufferMultisample = 1;
@@ -244,10 +247,15 @@ void ProcessAndRender()
// Adjust eye position and rotation from controls, maintaining y position from HMD.
static float BodyYaw(3.141592f);
static Vector3f HeadPos(0.0f, 1.6f, -5.0f);
+ static ovrTrackingState HmdState;
+
+ ovrVector3f hmdToEyeViewOffset[2] = { EyeRenderDesc[0].HmdToEyeViewOffset, EyeRenderDesc[1].HmdToEyeViewOffset };
+ ovrHmd_GetEyePoses(HMD, 0, hmdToEyeViewOffset, eyeRenderPose, &HmdState);
+
HeadPos.y = ovrHmd_GetFloat(HMD, OVR_KEY_EYE_HEIGHT, HeadPos.y);
- bool freezeEyeRender = Util_RespondToControls(BodyYaw, HeadPos, eyeRenderPose[1].Orientation);
+ bool freezeEyeRender = Util_RespondToControls(BodyYaw, HeadPos, HmdState.HeadPose.ThePose.Orientation);
- pRender->BeginScene();
+ pRender->BeginScene();
// Render the two undistorted eye views into their render buffers.
if (!freezeEyeRender) // freeze to debug for time warp
@@ -259,21 +267,20 @@ void ProcessAndRender()
for (int eyeIndex = 0; eyeIndex < ovrEye_Count; eyeIndex++)
{
ovrEyeType eye = HMD->EyeRenderOrder[eyeIndex];
- eyeRenderPose[eye] = ovrHmd_GetEyePose(HMD, eye);
// Get view and projection matrices
- Matrix4f rollPitchYaw = Matrix4f::RotationY(BodyYaw);
- Matrix4f finalRollPitchYaw = rollPitchYaw * Matrix4f(eyeRenderPose[eye].Orientation);
- Vector3f finalUp = finalRollPitchYaw.Transform(Vector3f(0,1,0));
- Vector3f finalForward = finalRollPitchYaw.Transform(Vector3f(0,0,-1));
- Vector3f shiftedEyePos = HeadPos + rollPitchYaw.Transform(eyeRenderPose[eye].Position);
+ Matrix4f rollPitchYaw = Matrix4f::RotationY(BodyYaw);
+ Matrix4f finalRollPitchYaw = rollPitchYaw * Matrix4f(eyeRenderPose[eye].Orientation);
+ Vector3f finalUp = finalRollPitchYaw.Transform(Vector3f(0,1,0));
+ Vector3f finalForward = finalRollPitchYaw.Transform(Vector3f(0,0,-1));
+ Vector3f shiftedEyePos = HeadPos + rollPitchYaw.Transform(eyeRenderPose[eye].Position);
Matrix4f view = Matrix4f::LookAtRH(shiftedEyePos, shiftedEyePos + finalForward, finalUp);
Matrix4f proj = ovrMatrix4f_Projection(EyeRenderDesc[eye].Fov, 0.01f, 10000.0f, true);
pRender->SetViewport(Recti(EyeRenderViewport[eye]));
pRender->SetProjection(proj);
pRender->SetDepthMode(true, true);
- pRoomScene->Render(pRender, Matrix4f::Translation(EyeRenderDesc[eye].ViewAdjust) * view);
+ pRoomScene->Render(pRender, view);
}
}
pRender->FinishScene();
@@ -365,6 +372,7 @@ void Release(void)
#endif
ovrHmd_Destroy(HMD);
+ HMD = 0;
Util_ReleaseWindowAndGraphics(pRender);
if (pRoomScene) delete pRoomScene;