private void SetProjectionOffset() { viewCenter = OculusClient.GetScreenSize().X * 0.212f; // 0.25f 0.212f eyeProjectionShift = viewCenter - OculusClient.GetLensSeparationDistance() * 0.5f; projectionCenterOffset = 4.0f * eyeProjectionShift / OculusClient.GetScreenSize().X; projCenter = originalProjectionMatrix; projLeft = Matrix.CreateTranslation(projectionCenterOffset, 0, 0) * projCenter; projRight = Matrix.CreateTranslation(-projectionCenterOffset, 0, 0) * projCenter; halfIPD = OculusClient.GetInterpupillaryDistance() * 0.5f; viewLeft = viewMatrix * Matrix.CreateTranslation(halfIPD, 0, 0); viewRight = viewMatrix * Matrix.CreateTranslation(-halfIPD, 0, 0); }
private void InitOculus() { // Load the Oculus Rift Distortion Shader // https://mega.co.nz/#!E4YkjJ6K!MuIDuB78NwgHsGgeONikDAT_OLJQ0ZeLXbfGF1OAhzw oculusRiftDistortionShader = Content.Load <Effect>(@"Shader/OculusRift"); aspectRatio = (float)(OculusClient.GetScreenResolution().X * 0.5f / (float)(OculusClient.GetScreenResolution().Y)); fov_d = OculusClient.GetEyeToScreenDistance(); fov_x = OculusClient.GetScreenSize().Y *scaleImageFactor; yfov = 2.0f * (float)Math.Atan(fov_x / fov_d); // Set ProjectionMatrix originalProjectionMatrix = Matrix.CreatePerspectiveFieldOfView(yfov, aspectRatio, 0.05f, 10000.0f); // Init left and right RenderTarget renderTargetLeft = new RenderTarget2D(device, graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight, true, SurfaceFormat.Bgr565, DepthFormat.Depth24Stencil8); renderTargetRight = new RenderTarget2D(device, graphics.PreferredBackBufferWidth / 2, graphics.PreferredBackBufferHeight, true, SurfaceFormat.Bgr565, DepthFormat.Depth24Stencil8); OculusClient.SetSensorPredictionTime(0, 0.03f); UpdateResolutionAndRenderTargets(); }