public void Load(Main m, Ovr.Eye eyeType, Ovr.FovPort fov) { this.main = m; this.fov = fov; this.eye = eyeType; this.Reload(); }
//Initializing private void MainWindow_Load(object sender, EventArgs e) { ovr = new Ovr(); ovr.Init(); labelMonitorName.Text = ovr.HMDInfo.MonitorName; labelResolution.Text = ovr.HMDInfo.HResolution.ToString() + " / " + ovr.HMDInfo.VResolution.ToString(); labelScreenSize.Text = ovr.HMDInfo.HScreenSize.ToString() + " / " + ovr.HMDInfo.VScreenSize.ToString(); labelEyeToScreenDistance.Text = ovr.HMDInfo.EyeToScreenDistance.ToString(); labelLensSeparationDistance.Text = ovr.HMDInfo.LensSeparationDistance.ToString(); labelInterpupillaryDistance.Text = ovr.HMDInfo.InterpupillaryDistance.ToString(); labelDistortionK.Text = ovr.HMDInfo.DistortionK[0].ToString() + " / " + ovr.HMDInfo.DistortionK[1].ToString() + " / " + ovr.HMDInfo.DistortionK[2].ToString() + " / " + ovr.HMDInfo.DistortionK[3].ToString(); labelDesktop.Text = ovr.HMDInfo.DesktopX.ToString() + " / " + ovr.HMDInfo.DesktopY.ToString(); }
public void Render(RenderTarget2D frameBuffer, Ovr.Posef eyePose, Effect effect) { effect.Parameters["EyeToSourceUVScale"].SetValue(this.uvScale); effect.Parameters["EyeToSourceUVOffset"].SetValue(this.uvOffset); Ovr.Matrix4f[] timeWarpMatrices = this.main.VRHmd.GetEyeTimewarpMatrices(this.eye, eyePose); effect.Parameters["EyeRotationStart"].SetValue(Oculus.MatrixOvrToXna(timeWarpMatrices[0])); effect.Parameters["EyeRotationEnd"].SetValue(Oculus.MatrixOvrToXna(timeWarpMatrices[1])); effect.Parameters["FrameBuffer" + Lemma.Components.Model.SamplerPostfix].SetValue(frameBuffer); effect.CurrentTechnique.Passes[0].Apply(); this.main.GraphicsDevice.SetVertexBuffer(this.vb); this.main.GraphicsDevice.Indices = this.ib; // Draw primitives this.main.GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, this.vb.VertexCount, 0, this.ib.IndexCount / 3); Lemma.Components.Model.DrawCallCounter++; Lemma.Components.Model.TriangleCounter += this.ib.IndexCount / 3; }
public static Matrix MatrixOvrToXna(Ovr.Matrix4f m) { return new Matrix ( m.m[0, 0], m.m[1, 0], m.m[2, 0], m.m[3, 0], m.m[0, 1], m.m[1, 1], m.m[2, 1], m.m[3, 1], m.m[0, 2], m.m[1, 2], m.m[2, 2], m.m[3, 2], m.m[0, 3], m.m[1, 3], m.m[2, 3], m.m[3, 3] ); }
private void drawEye(Camera originalCamera, GameTime gameTime, Ovr.Posef pose, RenderTarget2D renderTarget, bool updateLights) { Quaternion quat = new Quaternion(pose.Orientation.x, pose.Orientation.y, pose.Orientation.z, pose.Orientation.w); this.vrCamera.RotationMatrix.Value = Matrix.CreateFromQuaternion(quat) * originalCamera.RotationMatrix; Vector3 viewAdjust = Vector3.TransformNormal(new Vector3(pose.Position.x, pose.Position.y, pose.Position.z), originalCamera.RotationMatrix); this.vrCamera.Position.Value = originalCamera.Position.Value + viewAdjust * Main.VRUnitToWorldUnit; Ovr.Matrix4f proj = Ovr.Hmd.GetProjection(this.vrLeftFov, originalCamera.NearPlaneDistance, originalCamera.FarPlaneDistance, (uint)Ovr.Hmd.ProjectionModifier.RightHanded); this.vrCamera.Projection.Value = Oculus.MatrixOvrToXna(proj); for (int i = 0; i < this.preframeDrawables.Count; i++) { IDrawablePreFrameComponent c = this.preframeDrawables[i]; if (this.componentEnabled(c)) c.DrawPreFrame(gameTime, this.renderParameters); } this.Renderer.SetRenderTargets(this.renderParameters); this.DrawScene(this.renderParameters); if (updateLights) { this.LightingManager.UpdateGlobalLights(); this.LightingManager.RenderShadowMaps(originalCamera); } this.Renderer.PostProcess(renderTarget, this.renderParameters); for (int i = 0; i < this.nonPostProcessedDrawables.Count; i++) { INonPostProcessedDrawableComponent c = this.nonPostProcessedDrawables[i]; if (this.componentEnabled(c)) c.DrawNonPostProcessed(gameTime, this.renderParameters); } }