From adcfbfbb0e802d0dd2dbac32b1423a8838f69dd9 Mon Sep 17 00:00:00 2001 From: Yannick Date: Fri, 10 Mar 2017 14:19:56 +0100 Subject: [PATCH] WIP OSVR Implementation. RenderManager is disabled for now --- C3DE.Demo/C3DE.Demo.csproj | 1 + C3DE.Demo/Scenes/VirtualRealityDemo.cs | 6 +- C3DE/C3DE.Desktop.csproj | 31 +- C3DE/Rendering/VRRenderer.cs | 4 +- .../VR/OSVR/OSVR.MonoGame/DeviceDescriptor.cs | 344 ++++++++++++++++++ C3DE/VR/OSVR/OSVR.MonoGame/Math.cs | 64 ++++ C3DE/VR/OSVR/OSVR.MonoGame/ReportTypes.cs | 27 ++ C3DE/VR/OSVR/OSVR.MonoGame/Sample/Axes.cs | 48 +++ .../Sample/MouselookPoseSignal.cs | 78 ++++ .../OSVR/OSVR.MonoGame/Sample/SampleGame.cs | 283 ++++++++++++++ C3DE/VR/OSVR/OSVR.MonoGame/VREye.cs | 144 ++++++++ C3DE/VR/OSVR/OSVR.MonoGame/VRHead.cs | 249 +++++++++++++ .../OSVR.MonoGame/XnaEyeTracker3DInterface.cs | 24 ++ .../OSVR.MonoGame/XnaOrientationInterface.cs | 26 ++ .../VR/OSVR/OSVR.MonoGame/XnaPoseInterface.cs | 24 ++ .../OSVR.MonoGame/XnaPosition2DInterface.cs | 24 ++ .../OSVR.MonoGame/XnaPositionInterface.cs | 24 ++ C3DE/VR/{ => OSVR}/OSVRService.cs | 81 ++--- C3DE/VR/{ => Oculus}/OculusRift.cs | 82 +++-- C3DE/VR/{ => Oculus}/OculusRiftService.cs | 0 C3DE/VR/{ => Oculus}/OculusWrapService.cs | 0 C3DE/VR/{ => OpenVR}/OpenVRService.cs | 9 +- C3DE/VR/{ => OpenVR}/openvr_api.cs | 0 C3DE/packages.config | 4 + Deps/OculusRift.dll | Bin 212480 -> 120832 bytes 25 files changed, 1484 insertions(+), 93 deletions(-) create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/DeviceDescriptor.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/Math.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/ReportTypes.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/Sample/Axes.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/Sample/MouselookPoseSignal.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/Sample/SampleGame.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/VREye.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/VRHead.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/XnaEyeTracker3DInterface.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/XnaOrientationInterface.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/XnaPoseInterface.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/XnaPosition2DInterface.cs create mode 100644 C3DE/VR/OSVR/OSVR.MonoGame/XnaPositionInterface.cs rename C3DE/VR/{ => OSVR}/OSVRService.cs (61%) rename C3DE/VR/{ => Oculus}/OculusRift.cs (76%) rename C3DE/VR/{ => Oculus}/OculusRiftService.cs (100%) rename C3DE/VR/{ => Oculus}/OculusWrapService.cs (100%) rename C3DE/VR/{ => OpenVR}/OpenVRService.cs (97%) rename C3DE/VR/{ => OpenVR}/openvr_api.cs (100%) create mode 100644 C3DE/packages.config diff --git a/C3DE.Demo/C3DE.Demo.csproj b/C3DE.Demo/C3DE.Demo.csproj index 9a371d4a..5f85cfac 100644 --- a/C3DE.Demo/C3DE.Demo.csproj +++ b/C3DE.Demo/C3DE.Demo.csproj @@ -67,6 +67,7 @@ + diff --git a/C3DE.Demo/Scenes/VirtualRealityDemo.cs b/C3DE.Demo/Scenes/VirtualRealityDemo.cs index d2e9a1cc..088bfe1d 100644 --- a/C3DE.Demo/Scenes/VirtualRealityDemo.cs +++ b/C3DE.Demo/Scenes/VirtualRealityDemo.cs @@ -29,8 +29,10 @@ public override void Initialize() _prevRenderer = Application.Engine.Renderer; - var vrDevice = new OpenVRService(Application.Engine); - Application.Engine.Renderer = new VRRenderer(Application.GraphicsDevice, vrDevice); + var vrDevice = new OSVRService(Application.Engine); + var vrRenderer = new VRRenderer(Application.GraphicsDevice, vrDevice); + vrRenderer.StereoPreview = true; + Application.Engine.Renderer = vrRenderer; } public override void Unload() diff --git a/C3DE/C3DE.Desktop.csproj b/C3DE/C3DE.Desktop.csproj index eb7af42c..27da65d4 100644 --- a/C3DE/C3DE.Desktop.csproj +++ b/C3DE/C3DE.Desktop.csproj @@ -46,6 +46,9 @@ MinimumRecommendedRules.ruleset + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll + ..\Deps\OculusWrap.dll @@ -155,12 +158,28 @@ - - - - - - + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/C3DE/Rendering/VRRenderer.cs b/C3DE/Rendering/VRRenderer.cs index 1e81be21..9f3eaec6 100644 --- a/C3DE/Rendering/VRRenderer.cs +++ b/C3DE/Rendering/VRRenderer.cs @@ -80,8 +80,8 @@ private void DrawEyeViewIntoBackbuffer(int eye) if (StereoPreview) { width = pp.BackBufferWidth / 2; - m_spriteBatch.Draw(renderTargetEye[0], new Rectangle(0, 0, width, height), null, Color.White, MathHelper.Pi, Vector2.Zero, _vrDevice.PreviewRenderEffect, 0); - m_spriteBatch.Draw(renderTargetEye[1], new Rectangle(width, 0, width, height), null, Color.White, MathHelper.Pi, Vector2.Zero, _vrDevice.PreviewRenderEffect, 0); + m_spriteBatch.Draw(renderTargetEye[0], new Rectangle(0, 0, width, height), null, Color.White, 0, Vector2.Zero, _vrDevice.PreviewRenderEffect, 0); + m_spriteBatch.Draw(renderTargetEye[1], new Rectangle(width, 0, width, height), null, Color.White, 0, Vector2.Zero, _vrDevice.PreviewRenderEffect, 0); } else m_spriteBatch.Draw(renderTargetEye[eye], new Rectangle(offset, 0, width, height), null, Color.White, 0, Vector2.Zero, _vrDevice.PreviewRenderEffect, 0); diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/DeviceDescriptor.cs b/C3DE/VR/OSVR/OSVR.MonoGame/DeviceDescriptor.cs new file mode 100644 index 00000000..718634b8 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/DeviceDescriptor.cs @@ -0,0 +1,344 @@ +/// OSVR-Unity Connection +/// +/// http://sensics.com/osvr +/// +/// +/// Copyright 2014 Sensics, Inc. +/// +/// Licensed under the Apache License, Version 2.0 (the "License"); +/// you may not use this file except in compliance with the License. +/// You may obtain a copy of the License at +/// +/// http://www.apache.org/licenses/LICENSE-2.0 +/// +/// Unless required by applicable law or agreed to in writing, software +/// distributed under the License is distributed on an "AS IS" BASIS, +/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +/// See the License for the specific language governing permissions and +/// limitations under the License. +/// + +using System.Collections; +using System.Text; + +//a class for storing information about a device based on it's json descriptor file +using Newtonsoft.Json; +using System.IO; +using System; +using System.Diagnostics; + + +public class DeviceDescriptor +{ + + //filename + private string _fileName = ""; + public string FileName + { + get { return _fileName; } + set { _fileName = value; } + } + //hmd + private string _vendor = ""; + public string Vendor + { + get { return _vendor; } + set { _vendor = value; } + } + private string _model = ""; + public string Model + { + get { return _model; } + set { _model = value; } + } + private string _version; + public string Version + { + get { return _version; } + set { _version = value; } + } + private string _note = ""; + public string Note + { + get { return _note; } + set { _note = value; } + } + //field of view + private float _monocularHorizontal = 60f; + public float MonocularHorizontal + { + get { return _monocularHorizontal; } + set { _monocularHorizontal = value; } + } + private float _monocularVertical = 60f; + public float MonocularVertical + { + get { return _monocularVertical; } + set { _monocularVertical = value; } + } + private float _overlapPercent = 100f; + public float OverlapPercent + { + get { return _overlapPercent; } + set { _overlapPercent = value; } + } + private float _pitchTilt = 0; + public float PitchTilt + { + get { return _pitchTilt; } + set { _pitchTilt = value; } + } + //resolutions + private int _width = 1920; + public int Width + { + get { return _width; } + set { _width = value; } + } + private int _height = 1080; + public int Height + { + get { return _height; } + set { _height = value; } + } + private int _numDisplays = 1; + public int NumDisplays + { + get { return _numDisplays; } + set { _numDisplays = value; } + } + private int _videoInputs = 1; + public int VideoInputs + { + get { return _videoInputs; } + set { _videoInputs = value; } + } + private string _displayMode = "horz_side_by_side"; + public string DisplayMode + { + get { return _displayMode; } + set { _displayMode = value; } + } + //distortion + private float _k1Red = 0; + public float K1Red + { + get { return _k1Red; } + set { _k1Red = value; } + } + private float _k1Green = 0; + public float K1Green + { + get { return _k1Green; } + set { _k1Green = value; } + } + private float _k1Blue = 0; + public float K1Blue + { + get { return _k1Blue; } + set { _k1Blue = value; } + } + //rendering + private float _leftRoll = 0; + public float LeftRoll + { + get { return _leftRoll; } + set { _leftRoll = value; } + } + private float _rightRoll = 0; + public float RightRoll + { + get { return _rightRoll; } + set { _rightRoll = value; } + } + //eyes + private float _centerProjX = 0.5f; + public float CenterProjX + { + get { return _centerProjX; } + set { _centerProjX = value; } + } + private float _centerProjY = 0.5f; + public float CenterProjY + { + get { return _centerProjY; } + set { _centerProjY = value; } + } + private int _rotate180 = 0; + public int Rotate180 + { + get { return _rotate180; } + set { _rotate180 = value; } + } + + //constructors + public DeviceDescriptor() { } + public DeviceDescriptor(string fileName, string vendor, string model, string version, int numDisplays, string note, float monocularHorizontal, + float monocularVertical, float overlapPercent, float pitchTilt, int width, int height, int videoInputs, string displayMode, float k1Red, + float k1Green, float k1Blue, float leftRoll, float rightRoll, float centerProjX, float centerProjY, int rotate180) + { + this._fileName = fileName; + this._vendor = vendor; + this._model = model; + this._version = version; + this._numDisplays = numDisplays; + this._note = note; + this._monocularHorizontal = monocularHorizontal; + this._monocularVertical = monocularVertical; + this._overlapPercent = overlapPercent; + this._pitchTilt = pitchTilt; + this._width = width; + this._height = height; + this._videoInputs = videoInputs; + this._displayMode = displayMode; + this._k1Red = k1Red; + this._k1Green = k1Green; + this._k1Blue = k1Blue; + this._leftRoll = leftRoll; + this._rightRoll = rightRoll; + this._centerProjX = centerProjX; + this._centerProjY = centerProjY; + this._rotate180 = rotate180; + } + + public override string ToString() + { + + if (FileName.Equals("")) + { + return "No json file has been provided."; + } + //print + StringBuilder jsonPrinter = new StringBuilder(64); + jsonPrinter.AppendLine("Json File Device Description:") + .Append("filename = ").AppendLine(FileName) + .Append("HMD\n") + .Append("vendor = ").AppendLine(Vendor) + .Append("model = ").AppendLine(Model) + .Append("version = ").AppendLine(Version) + .Append("num_displays = ").AppendLine(NumDisplays.ToString()) + .Append("notes = ").AppendLine(Note) + .Append("\nFIELD OF VIEW\n") + .Append("monocular_horizontal = ").AppendLine(MonocularHorizontal.ToString()) + .Append("monocular_vertical = ").AppendLine(MonocularVertical.ToString()) + .Append("overlap_percent = ").AppendLine(OverlapPercent.ToString()) + .Append("pitch_tilt = ").AppendLine(PitchTilt.ToString()) + .Append("\nRESOLUTION\n") + .Append("width = ").AppendLine(Width.ToString()) + .Append("height = ").AppendLine(Height.ToString()) + .Append("video_inputs = ").AppendLine(VideoInputs.ToString()) + .Append("display_mode = ").AppendLine(DisplayMode) + .Append("\nDISTORTION\n") + .Append("k1_red = ").AppendLine(K1Red.ToString()) + .Append("k1_green = ").AppendLine(K1Green.ToString()) + .Append("k1_blue = ").AppendLine(K1Blue.ToString()) + .Append("\nRENDERING\n") + .Append("left_roll = ").AppendLine(LeftRoll.ToString()) + .Append("right_roll = ").AppendLine(RightRoll.ToString()) + .Append("\nEYES\n") + .Append("center_proj_x = ").AppendLine(CenterProjX.ToString()) + .Append("center_proj_y = ").AppendLine(CenterProjY.ToString()) + .Append("rotate_180 = ").AppendLine(Rotate180.ToString()); + return jsonPrinter.ToString(); + } + + /// + /// This function will parse the device parameters from a device descriptor json file using Newstonsoft + /// Returns a DeviceDescriptor object containing stored json values. + /// + public static DeviceDescriptor Parse(string deviceDescriptorJson) + { + if (deviceDescriptorJson == null) + throw new ArgumentNullException("deviceDescriptorJson"); + + var reader = new JsonTextReader(new StringReader(deviceDescriptorJson)); + if (reader == null) + return null; + + var deviceDescriptor = new DeviceDescriptor(); + + while (reader.Read()) + { + if (reader.Value != null && reader.ValueType == typeof(String)) + { + var parsedJson = reader.Value.ToString().ToLower(); + + try + { + switch (parsedJson) + { + case "vendor": + deviceDescriptor.Vendor = reader.ReadAsString(); + break; + case "model": + deviceDescriptor.Model = reader.ReadAsString(); + break; + case "version": + deviceDescriptor.Version = reader.ReadAsString(); + break; + case "num_displays": + deviceDescriptor.NumDisplays = int.Parse(reader.ReadAsString()); + break; + case "note": + deviceDescriptor.Note = reader.ReadAsString(); + break; + case "monocular_horizontal": + deviceDescriptor.MonocularHorizontal = float.Parse(reader.ReadAsString()); + break; + case "monocular_vertical": + deviceDescriptor.MonocularVertical = float.Parse(reader.ReadAsString()); + break; + case "overlap_percent": + deviceDescriptor.OverlapPercent = float.Parse(reader.ReadAsString()); + break; + case "pitch_tilt": + deviceDescriptor.PitchTilt = float.Parse(reader.ReadAsString()); + break; + case "width": + deviceDescriptor.Width = int.Parse(reader.ReadAsString()); + break; + case "height": + deviceDescriptor.Height = int.Parse(reader.ReadAsString()); + break; + case "video_inputs": + deviceDescriptor.VideoInputs = int.Parse(reader.ReadAsString()); + break; + case "display_mode": + deviceDescriptor.DisplayMode = reader.ReadAsString(); + break; + case "k1_red": + deviceDescriptor.K1Red = float.Parse(reader.ReadAsString()); + break; + case "k1_green": + deviceDescriptor.K1Green = float.Parse(reader.ReadAsString()); + break; + case "k1_blue": + deviceDescriptor.K1Blue = float.Parse(reader.ReadAsString()); + break; + case "right_roll": + deviceDescriptor.RightRoll = float.Parse(reader.ReadAsString()); + break; + case "left_roll": + deviceDescriptor.LeftRoll = float.Parse(reader.ReadAsString()); + break; + case "center_proj_x": + deviceDescriptor.CenterProjX = float.Parse(reader.ReadAsString()); + break; + case "center_proj_y": + deviceDescriptor.CenterProjY = float.Parse(reader.ReadAsString()); + break; + case "rotate_180": + deviceDescriptor.Rotate180 = int.Parse(reader.ReadAsString()); + break; + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + } + + return deviceDescriptor; + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/Math.cs b/C3DE/VR/OSVR/OSVR.MonoGame/Math.cs new file mode 100644 index 00000000..b560fa54 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/Math.cs @@ -0,0 +1,64 @@ +/* + * Port of Math.cs from OSVR-Unity by Sensics, Inc. + */ +using Microsoft.Xna.Framework; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// Class of static methods for converting from OSVR math/tracking types to MonoGame-native data types, + /// including coordinate system change as needed. + /// + public class Math + { + public static Vector3 ConvertPosition(OSVR.ClientKit.Vec3 vec) + { + return new Vector3((float)vec.x, (float)vec.y, (float)vec.z); + } + + public static Vector2 ConvertPosition(ClientKit.Vec2 sourceValue) + { + return new Vector2((float)sourceValue.x, (float)sourceValue.y); + } + + public static Quaternion ConvertOrientation(OSVR.ClientKit.Quaternion quat) + { + //// Wikipedia may say quaternions are not handed, but these needed modification. + //return new Quaternion(-(float)quat.x, -(float)quat.y, (float)quat.z, (float)quat.w); + + // JEB: not sure if these need conversion for MonoGame. Won't know until I get + // an actual headset. + return new Quaternion((float)quat.x, (float)quat.y, (float)quat.z, (float)quat.w); + } + + public static Matrix ConvertPoseToMatrix(XnaPose pose) + { + var ret = Matrix.CreateFromQuaternion(pose.Rotation); + ret.Translation = pose.Position; // This saves one matrix multiply + return ret; + } + + public static XnaPose ConvertPose(OSVR.ClientKit.Pose3 pose) + { + return new XnaPose + { + Position = Math.ConvertPosition(pose.translation), + Rotation = Math.ConvertOrientation(pose.rotation), + }; + } + + public static XnaEyeTracker3DState ConvertEyeTracker3DState(ClientKit.EyeTracker3DState sourceValue) + { + return new XnaEyeTracker3DState + { + BasePositionValid = sourceValue.basePointValid, + BasePosition = Math.ConvertPosition(sourceValue.basePoint), + DirectionValid = sourceValue.directionValid, + Direction = Math.ConvertPosition(sourceValue.direction), + }; + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/ReportTypes.cs b/C3DE/VR/OSVR/OSVR.MonoGame/ReportTypes.cs new file mode 100644 index 00000000..f0ff15db --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/ReportTypes.cs @@ -0,0 +1,27 @@ +using Microsoft.Xna.Framework; + +namespace OSVR.MonoGame +{ + /// + /// Report value for the pose callback + /// + public struct XnaPose + { + public XnaPose(Vector3 position, Quaternion rotation) + : this() + { + Position = position; + Rotation = rotation; + } + public Vector3 Position { get; set; } + public Quaternion Rotation { get; set; } + } + + public struct XnaEyeTracker3DState + { + public bool BasePositionValid { get; set; } + public Vector3 BasePosition { get; set; } + public bool DirectionValid { get; set; } + public Vector3 Direction { get; set; } + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/Sample/Axes.cs b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/Axes.cs new file mode 100644 index 00000000..3c51cabc --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/Axes.cs @@ -0,0 +1,48 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sample +{ + class Axes + { + VertexPositionColor[] vertices = new VertexPositionColor[3]; + VertexBuffer vertexBuffer; + BasicEffect basicEffect; + + public void LoadContent(GraphicsDevice graphicsDevice) + { + basicEffect = new BasicEffect(graphicsDevice); + vertexBuffer = new VertexBuffer(graphicsDevice, typeof(VertexPositionColor), 3, BufferUsage.WriteOnly); + } + + public void Draw(float size, Color color, Matrix view, Matrix world, Matrix projection, GraphicsDevice graphicsDevice) + { + basicEffect.World = world; + basicEffect.View = view; + basicEffect.Projection = projection; + basicEffect.VertexColorEnabled = true; + + vertices[0] = new VertexPositionColor(new Vector3(0f, 0f, -size), color); + vertices[1] = new VertexPositionColor(new Vector3(size * 0.25f, 0f, 0f), Color.Black); + vertices[2] = new VertexPositionColor(new Vector3(-size * 0.25f, 0f, 0f), Color.Black); + + vertexBuffer.SetData(vertices); + graphicsDevice.SetVertexBuffer(vertexBuffer); + + var rasterizerState = new RasterizerState(); + rasterizerState.CullMode = CullMode.None; + graphicsDevice.RasterizerState = rasterizerState; + + foreach(var pass in basicEffect.CurrentTechnique.Passes) + { + pass.Apply(); + graphicsDevice.DrawPrimitives(PrimitiveType.TriangleList, 0, 1); + } + } + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/Sample/MouselookPoseSignal.cs b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/MouselookPoseSignal.cs new file mode 100644 index 00000000..928bdaac --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/MouselookPoseSignal.cs @@ -0,0 +1,78 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using OSVR.MonoGame; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Sample +{ + public class MouselookInterface : OSVR.ClientKit.IInterface + { + Viewport viewport; + MouseState lastMouseState; + Quaternion value = Quaternion.Identity; + bool firstUpdate = true; + const float RotationSpeed = .5f; + float rotationX = 0f; + float rotationY = 0f; + + public MouselookInterface(Viewport viewport) + { + this.viewport = viewport; + } + + public void Update(GameTime gameTime) + { + // For some reason, Mouse.SetPosition throws an ObjectDisposedException + // when the game quits. TODO: determine the cause and possible mitigations. + // commenting out for now + if(firstUpdate) + { + firstUpdate = false; + Mouse.SetPosition(viewport.Width / 2, viewport.Height / 2); + lastMouseState = Mouse.GetState(); + } + else + { + var mouseState = Mouse.GetState(); + if (mouseState != lastMouseState) + { + var t = (float)gameTime.ElapsedGameTime.TotalSeconds; + var deltaX = mouseState.X - lastMouseState.X; + var deltaY = mouseState.Y - lastMouseState.Y; + rotationY -= (float)deltaX * RotationSpeed * t; + rotationX -= (float)deltaY * RotationSpeed * t; + if (rotationX > MathHelper.PiOver2) { rotationX = MathHelper.PiOver2; } + if (rotationX < -MathHelper.PiOver2) { rotationX = -MathHelper.PiOver2; } + Mouse.SetPosition(viewport.Width / 2, viewport.Height / 2); + lastMouseState = Mouse.GetState(); + } + } + value = Quaternion.CreateFromYawPitchRoll(rotationY, rotationX, 0f); + } + + public OSVR.ClientKit.InterfaceState GetState() + { + var pose = new XnaPose { Rotation = value, Position = Vector3.Zero }; + return new OSVR.ClientKit.InterfaceState + { + Timestamp = new OSVR.ClientKit.TimeValue(), + Value = pose, + }; + } + + event OSVR.ClientKit.StateChangedHandler OSVR.ClientKit.IInterface.StateChanged + { + add { throw new NotImplementedException(); } + remove { throw new NotImplementedException(); } + } + + public void Dispose() + { + } + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/Sample/SampleGame.cs b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/SampleGame.cs new file mode 100644 index 00000000..e4b52dc2 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/Sample/SampleGame.cs @@ -0,0 +1,283 @@ +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using Microsoft.Xna.Framework.Input; +using OSVR.ClientKit; +using OSVR.MonoGame; +using System; + +namespace Sample +{ + enum OrientationMode { Head, Mouselook, RightHand }; + public class SampleGame : Game, IStereoSceneDrawer + { + // XNA resources + GraphicsDeviceManager graphics; + SpriteBatch spriteBatch; + SpriteFont diagnosticFont; + Texture2D blank; + Model model; + Axes axes; + KeyboardState lastKeyboardState; + + // OSVR resources + ClientContext context; + VRHead vrHead; + OSVR.ClientKit.IInterface leftHandPose; + OSVR.ClientKit.IInterface rightHandPose; + OSVR.ClientKit.IInterface headPose; + OSVR.ClientKit.IInterface leftEye2D; + OrientationMode orientationMode = OrientationMode.Head; + MouselookInterface mouselook; + + // Game-related properties + const float moveSpeed = 5f; + Vector3 leftHandOffset = new Vector3(0, 0, -1); + Vector3 rightHandOffset = new Vector3(0, 0, -1); + Vector3 position = new Vector3(0, 5f, 0f); + float rotationY = 0f; + bool firstUpdate = true; + + public SampleGame() + : base() + { + graphics = new GraphicsDeviceManager(this); + graphics.GraphicsProfile = GraphicsProfile.HiDef; + Content.RootDirectory = "Content"; + } + + protected override void Initialize() + { + context = new ClientContext("osvr.monogame.Sample"); + + leftHandPose = new XnaPoseInterface(context.GetPoseInterface("/me/hands/left")); + rightHandPose = new XnaPoseInterface(context.GetPoseInterface("/me/hands/right")); + leftEye2D = new XnaPosition2DInterface(context.GetEyeTracker2DInterface("/me/eyes/left")); + + // You should always be using "/me/head" for HMD orientation tracking, + // but we're mocking HMD head tracking with either hand tracking (e.g. Hydra controllers) + // or with mouselook. You can cycle through them with the O key. + headPose = new XnaPoseInterface(context.GetPoseInterface("/me/head")); + + // Mouselook emulation of the head-tracking orientation interface + mouselook = new MouselookInterface(GraphicsDevice.Viewport); + + vrHead = new VRHead(graphics, context, headPose); + base.Initialize(); + } + + protected override void LoadContent() + { + axes = new Axes(); + axes.LoadContent(GraphicsDevice); + model = Content.Load("SketchupTest"); + diagnosticFont = Content.Load("DiagnosticFont"); + spriteBatch = new SpriteBatch(GraphicsDevice); + blank = new Texture2D(GraphicsDevice, 1, 1); + blank.SetData(new[] { Color.White }); + + base.LoadContent(); + } + + protected override void UnloadContent() + { + base.UnloadContent(); + this.leftHandPose.Dispose(); + this.rightHandPose.Dispose(); + this.headPose.Dispose(); + context.Dispose(); + leftHandPose = null; + rightHandPose = null; + headPose = null; + context = null; + } + + private void CycleOrientationMode() + { + switch (orientationMode) + { + case OrientationMode.Head: + orientationMode = OrientationMode.Mouselook; + vrHead.Pose = mouselook; + break; + case OrientationMode.Mouselook: + orientationMode = OrientationMode.RightHand; + vrHead.Pose = rightHandPose; + break; + case OrientationMode.RightHand: + orientationMode = OrientationMode.Head; + vrHead.Pose = headPose; + break; + default: + throw new InvalidOperationException("Unknown orientation mode."); + } + } + + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape)) + { + Exit(); + } + else + { + var t = (float)gameTime.ElapsedGameTime.TotalSeconds; + var kbs = Keyboard.GetState(); + + if(firstUpdate) + { + firstUpdate = false; + } + else + { + if(lastKeyboardState.IsKeyUp(Keys.O) && kbs.IsKeyDown(Keys.O)) + { + CycleOrientationMode(); + } + + if(lastKeyboardState.IsKeyUp(Keys.C) && kbs.IsKeyDown(Keys.C)) + { + leftHandOffset = Vector3.Negate(leftHandPose.GetState().Value.Position); + rightHandOffset = Vector3.Negate(rightHandPose.GetState().Value.Position); + } + + if(lastKeyboardState.IsKeyUp(Keys.F) && kbs.IsKeyDown(Keys.F)) + { + graphics.IsFullScreen = !graphics.IsFullScreen; + graphics.ApplyChanges(); + } + } + lastKeyboardState = kbs; + + Vector3 movement = Vector3.Zero; + // forward/back + if (kbs.IsKeyDown(Keys.W)) + { + movement = Vector3.Forward * moveSpeed * t; + } + else if (kbs.IsKeyDown(Keys.S)) + { + movement = Vector3.Backward * moveSpeed * t; + } + + // left/right + if (kbs.IsKeyDown(Keys.A)) + { + movement = Vector3.Left * moveSpeed * t; + } + else if (kbs.IsKeyDown(Keys.D)) + { + movement = Vector3.Right * moveSpeed * t; + } + + // kb left/right rotation + if(kbs.IsKeyDown(Keys.Left)) + { + rotationY += moveSpeed * t; + } + else if(kbs.IsKeyDown(Keys.Right)) + { + rotationY -= moveSpeed * t; + } + + var kbRotation = Microsoft.Xna.Framework.Quaternion.CreateFromYawPitchRoll(rotationY, 0f, 0f); + var transformedMovement = Vector3.Transform(movement, kbRotation * vrHead.Pose.GetState().Value.Rotation); + position = position + transformedMovement; + + // increase/decrease stereo amount + if (kbs.IsKeyDown(Keys.Q)) { vrHead.IPDInMeters += .01f * t; } + if (kbs.IsKeyDown(Keys.E)) { vrHead.IPDInMeters -= .01f * t; } + + vrHead.Update(); + if (orientationMode == OrientationMode.Mouselook) + { + mouselook.Update(gameTime); + } + + // context.Update must be called frequently + // perhaps more frequently than Update is called? + context.update(); + } + base.Update(gameTime); + } + + protected override void Draw(GameTime gameTime) + { + GraphicsDevice.Clear(Color.CornflowerBlue); + GraphicsDevice.BlendState = BlendState.Opaque; + GraphicsDevice.DepthStencilState = DepthStencilState.Default; + + vrHead.DrawScene(gameTime, spriteBatch, this); + base.Draw(gameTime); + } + + void DrawPose(Color color, OSVR.ClientKit.IInterface pose, Vector3 calibrationOffset, Matrix view, Matrix projection) + { + var poseState = pose.GetState(); + var yRotation = Microsoft.Xna.Framework.Quaternion.CreateFromYawPitchRoll(rotationY, 0, 0); + var rotation = yRotation * poseState.Value.Rotation; + var leftHandWorld = + Matrix.CreateFromQuaternion(rotation) + * Matrix.CreateTranslation(position + Vector3.Transform(calibrationOffset + poseState.Value.Position, yRotation)); + + axes.Draw( + size: .1f, + color: color, + view: view, + world: leftHandWorld, + projection: projection, + graphicsDevice: GraphicsDevice); + } + + public void DrawScene(GameTime gameTime, Microsoft.Xna.Framework.Graphics.Viewport viewport, Matrix stereoTransform, Matrix view, Matrix projection) + { + // TODO: Draw something fancy. Or at the very least visible? + var translation = Matrix.CreateTranslation(Vector3.Negate(position)); + var kbRotation = Matrix.CreateRotationY(-rotationY); + var cameraView = stereoTransform * translation * kbRotation * view; + + // Draw the model. A model can have multiple meshes, so loop. + var modelWorld = Matrix.CreateTranslation(0f, -0f, -0f); + foreach (ModelMesh mesh in model.Meshes) + { + // This is where the mesh orientation is set, as well + // as our camera and projection. + foreach (BasicEffect effect in mesh.Effects) + { + effect.EnableDefaultLighting(); + effect.World = modelWorld; + effect.View = cameraView; + effect.Projection = projection; + } + // Draw the mesh, using the effects set above. + mesh.Draw(); + } + + DrawPose(Color.Red, leftHandPose, leftHandOffset, cameraView, projection); + if (orientationMode != OrientationMode.RightHand) + { + DrawPose(Color.Blue, rightHandPose, rightHandOffset, cameraView, projection); + } + + var kbstate = Keyboard.GetState(); + if (kbstate.IsKeyDown(Keys.Q) || kbstate.IsKeyDown(Keys.E)) + { + // display IPD + spriteBatch.Begin(); + spriteBatch.DrawString(diagnosticFont, "IPD: " + (vrHead.IPDInMeters * 1000).ToString() + "mm", + new Vector2((float)viewport.Width / 2f, (float)viewport.Height / 2f), Color.White); + + // display eye tracking 2D location + var halfXSize = diagnosticFont.MeasureString("X") * .5f; + var eyeState = leftEye2D.GetState(); + var scaledEyePosition = new Vector2( + (eyeState.Value.X * (float)viewport.Width) - halfXSize.X, + (eyeState.Value.Y * (float)viewport.Height) - halfXSize.Y); + + spriteBatch.DrawString(diagnosticFont, "X", + scaledEyePosition, Color.Red); + + spriteBatch.End(); + } + } + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/VREye.cs b/C3DE/VR/OSVR/OSVR.MonoGame/VREye.cs new file mode 100644 index 00000000..669ae03c --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/VREye.cs @@ -0,0 +1,144 @@ +/* OSVR-Unity Connection + * + * + * Copyright 2014 Sensics, Inc. + * All rights reserved. + * + * Final version intended to be licensed under Apache v2.0 + */ +/// +/// Author: Bob Berkebile +/// Email: bob@bullyentertainment.com || bobb@pixelplacement.com +/// + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections; + +namespace OSVR +{ + namespace MonoGame + { + public enum Eye { Left, Right }; + + public class VREye + { + private OSVR.ClientKit.IInterface pose; + public OSVR.ClientKit.IInterface Pose + { + get { return pose; } + set { pose = value; } + } + + private readonly DeviceDescriptor deviceDescriptor; + + public Eye Eye { get; private set; } + + /// + /// Eye rotation around the Y axis, in radians + /// + public float EyeRotationY { get; set; } + + /// + /// Eye roll around the Z axis, in radians + /// + public float EyeRoll { get; set; } + + public Vector3 Translation { get; set; } + + public bool RotatePi { get; set; } + + // TODO: Should we cache this transform and recalculate it + // on an Update method? + public Matrix Transform + { + get + { + // orientation matrix + var poseState = this.pose.GetState(); + var translation = Matrix.CreateTranslation(Vector3.Negate(poseState.Value.Position)); + var rotation = Matrix.CreateFromQuaternion(Quaternion.Inverse(poseState.Value.Rotation)); + var viewMatrix = rotation * translation; + + // eye device rotation + var pitch = EyeRotationY; + var roll = EyeRoll; + var yaw = RotatePi ? MathHelper.Pi : 0f; + var eyeRotation = Matrix.CreateFromYawPitchRoll(yaw, pitch, roll); + + var ret = eyeRotation * viewMatrix; + return ret; + } + } + + public Matrix Projection + { + get + { + float aspectRatio = (float)deviceDescriptor.Width / (float)deviceDescriptor.Height; + // aspect ratio per eye depends on how many displays the HMD has + // for example, dSight has two 1920x1080 displays, so each eye should have 1.77 aspec + // whereas HDK has one 1920x1080 display, each eye should have 0.88 aspec (half of 1.77) + float aspectRatioPerEye = deviceDescriptor.NumDisplays == 1 ? aspectRatio * 0.5f : aspectRatio; + // set projection matrix for each eye. + + // Disabling the projection translation until I can verify the correct values to place here. + // The Unreal translation values were incorrect. + + // TODO: calculate the actual lense separation offset based on the device metadata + //var projectionOffset = 0.151976421f; + //var projectionTranslation = Matrix.CreateTranslation( + // Eye == MonoGame.Eye.Left ? projectionOffset : -projectionOffset, + // 0f, 0f); + + // Camera.projectionMatrix = Matrix4x4.Perspective(_deviceDescriptor.MonocularVertical, aspectRatioPerEye, Camera.nearClipPlane, Camera.farClipPlane); + return /*projectionTranslation **/ Matrix.CreatePerspectiveFieldOfView( + fieldOfView: MathHelper.ToRadians(deviceDescriptor.MonocularHorizontal), + aspectRatio: aspectRatioPerEye, + nearPlaneDistance: 0.01f, + farPlaneDistance: 5000f); + } + } + + // TODO: Should we cache this Viewport and recalculate it + // on an Update method? + public Viewport Viewport { + get + { + switch(Eye) + { + case MonoGame.Eye.Left: + return new Viewport + { + MinDepth = 0, + MaxDepth = 1, + X = 0, + Y = 0, + Width = deviceDescriptor.Width / 2, + Height = deviceDescriptor.Height, + }; + case MonoGame.Eye.Right: + return new Viewport + { + MinDepth = 0, + MaxDepth = 1, + X = deviceDescriptor.Width / 2, + Y = 0, + Width = deviceDescriptor.Width / 2, + Height = deviceDescriptor.Height, + }; + } + throw new InvalidOperationException("Unexpected eye type."); + } + } + + public VREye(OSVR.ClientKit.IInterface pose, Eye eye, DeviceDescriptor deviceDescriptor) + { + this.pose = pose; + this.Eye = eye; + this.deviceDescriptor = deviceDescriptor; + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/VRHead.cs b/C3DE/VR/OSVR/OSVR.MonoGame/VRHead.cs new file mode 100644 index 00000000..68823262 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/VRHead.cs @@ -0,0 +1,249 @@ +/* OSVR-Unity Connection + * + * + * Copyright 2014 Sensics, Inc. + * All rights reserved. + * + * Final version intended to be licensed under Apache v2.0 + */ +/// +/// Author: Bob Berkebile +/// Email: bob@bullyentertainment.com || bobb@pixelplacement.com +/// + +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using System; +using System.Collections; +using System.Diagnostics; + +namespace OSVR +{ + namespace MonoGame + { + + public enum ViewMode { Stereo, Mono }; + + public interface IStereoSceneDrawer + { + void DrawScene(GameTime gameTime, Viewport viewport, Matrix stereoTransform, Matrix view, Matrix projection); + } + + public class VRHead + { + public ViewMode ViewMode { get; set; } + + private float worldUnitsPerMeter = 1f; + public float WorldUnitsPerMeter { get { return worldUnitsPerMeter; } set { worldUnitsPerMeter = value; } } + + private float ipd = .061f; + public float IPDInMeters { get { return ipd; } set { ipd = value; } } + public float IPDInWorldUnits { get { return IPDInMeters * WorldUnitsPerMeter; } set { ipd = value / WorldUnitsPerMeter; } } + + + public float VerticalFieldOfView { get; private set; } + + public VREye LeftEye { get; private set; } + public VREye RightEye { get; private set; } + + public RenderTarget2D renderTargetLeft; + public RenderTarget2D renderTargetRight; + + readonly GraphicsDeviceManager graphicsDeviceManager; + DeviceDescriptor deviceDescriptor; + readonly OSVR.ClientKit.ClientContext context; + + OSVR.ClientKit.IInterface pose; + public OSVR.ClientKit.IInterface Pose + { + get { return pose; } + set + { + pose = value; + LeftEye.Pose = value; + RightEye.Pose = value; + } + } + + public VRHead(GraphicsDeviceManager graphicsDeviceManager, + OSVR.ClientKit.ClientContext context, + OSVR.ClientKit.IInterface pose) + { + this.pose = pose; + this.graphicsDeviceManager = graphicsDeviceManager; + this.context = context; + // TODO: Provide a way to pass in an explicit json value? + GetDeviceDescription(); + } + + public void Update() + { + UpdateStereoAmount(); + } + + void UpdateStereoAmount() + { + LeftEye.Translation = Vector3.Left * (IPDInWorldUnits * 0.5f); + RightEye.Translation = Vector3.Right * (IPDInWorldUnits * 0.5f); + } + + private void GetDeviceDescription() + { + var displayJson = context.getStringParameter("/display"); + deviceDescriptor = DeviceDescriptor.Parse(displayJson); + if(deviceDescriptor != null) + { + //// temporary overrides to simulate OSVR HDK + //// without actually reading in the json value + //deviceDescriptor.DisplayMode = "horz_side_by_side"; + //deviceDescriptor.MonocularHorizontal = 90f; + //deviceDescriptor.MonocularVertical = 101.25f; + //deviceDescriptor.OverlapPercent = 100f; + //deviceDescriptor.PitchTilt = 0f; + //deviceDescriptor.K1Red = 0f; + //deviceDescriptor.K1Green = 0f; + //deviceDescriptor.K1Blue = 0f; + //deviceDescriptor.RightRoll = 0f; + //deviceDescriptor.LeftRoll = 0f; + //deviceDescriptor.CenterProjX = 0.5f; + //deviceDescriptor.CenterProjY = 0.5f; + + LeftEye = new VREye(pose, Eye.Left, deviceDescriptor); + RightEye = new VREye(pose, Eye.Right, deviceDescriptor); + + switch(deviceDescriptor.DisplayMode) + { + case "full_screen": + ViewMode = MonoGame.ViewMode.Mono; + break; + case "horz_side_by_side": + case "vert_side_by_side": + default: + ViewMode = MonoGame.ViewMode.Stereo; + break; + } + //SetResolution(deviceDescriptor.Width, deviceDescriptor.Height); // set resolution before FOV + VerticalFieldOfView = MathHelper.Clamp(deviceDescriptor.MonocularVertical, 0, 180); + // TODO: should we provide HorizontalFieldOfView? + //SetDistortion(deviceDescriptor.K1Red, deviceDescriptor.K1Green, deviceDescriptor.K1Blue, + // deviceDescriptor.CenterProjX, deviceDescriptor.CenterProjY); //set distortion shader + + // if the view needs to be rotated 180 degrees, create a parent game object that is flipped + // 180 degrees on the z axis + if (deviceDescriptor.Rotate180 > 0) + { + LeftEye.RotatePi = true; + RightEye.RotatePi = true; + } + + SetEyeRotation(deviceDescriptor.OverlapPercent, deviceDescriptor.MonocularHorizontal); + SetEyeRoll(deviceDescriptor.LeftRoll, deviceDescriptor.RightRoll); + } + } + + //private void SetDistortion(float k1Red, float k1Green, float k1Blue, float centerProjX, float centerProjY) + //{ + // if (_distortionEffect != null) + // { + // _distortionEffect.k1Red = k1Red; + // _distortionEffect.k1Green = k1Green; + // _distortionEffect.k1Blue = k1Blue; + // _distortionEffect.fullCenter = new Vector2(centerProjX, centerProjY); + // } + //} + + //Set the Screen Resolution + + private RenderTarget2D MakeRenderTarget2D(int width, int height) + { + return new RenderTarget2D( + graphicsDevice: graphicsDeviceManager.GraphicsDevice, + width: width / 2, + height: height, + mipMap: false, + preferredFormat: graphicsDeviceManager.GraphicsDevice.PresentationParameters.BackBufferFormat, + preferredDepthFormat: DepthFormat.Depth24); + } + + private void SetResolution(int width, int height) + { + //set the resolution + graphicsDeviceManager.PreferredBackBufferWidth = width; + graphicsDeviceManager.PreferredBackBufferHeight = height; + renderTargetLeft = MakeRenderTarget2D(width, height); + renderTargetRight = MakeRenderTarget2D(width, height); + if (!Debugger.IsAttached) + { + graphicsDeviceManager.IsFullScreen = true; + } + graphicsDeviceManager.ApplyChanges(); + } + + // rotate each eye based on overlap percent and horizontal FOV + // Formula: ((OverlapPercent/100) * hFOV)/2 + private void SetEyeRotation(float overlapPercent, float horizontalFov) + { + float overlap = overlapPercent * 0.01f * horizontalFov * 0.5f; + + // with a 90 degree FOV with 100% overlap, the eyes should not be rotated + // compare rotationY with half of FOV + + float halfFOV = horizontalFov * 0.5f; + float rotateYAmount = MathHelper.ToRadians(System.Math.Abs(overlap - halfFOV)); + + LeftEye.EyeRotationY = -rotateYAmount; + RightEye.EyeRotationY = rotateYAmount; + } + + // rotate each eye on the z axis by the specified amount, in degrees + private void SetEyeRoll(float leftRoll, float rightRoll) + { + LeftEye.EyeRoll = MathHelper.ToRadians(leftRoll); + RightEye.EyeRoll = MathHelper.ToRadians(rightRoll); + } + + // TODO: instead of an Action, maybe pass an interface? + // I think that might be easier to use. Hard to document + // what each action arguments should be. + public void DrawScene(GameTime gameTime, SpriteBatch spriteBatch, IStereoSceneDrawer sceneDrawer) + { + DrawSceneForEye(LeftEye, gameTime, renderTargetLeft, sceneDrawer); + DrawSceneForEye(RightEye, gameTime, renderTargetRight, sceneDrawer); + + var leftRectangle = new Rectangle( + LeftEye.Viewport.X, LeftEye.Viewport.Y, + LeftEye.Viewport.Width, LeftEye.Viewport.Height); + + var rightRectangle = new Rectangle( + RightEye.Viewport.X, RightEye.Viewport.Y, + LeftEye.Viewport.Width, RightEye.Viewport.Height); + + graphicsDeviceManager.GraphicsDevice.SetRenderTarget(null); + spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque/*, null, null, null, distortionShader*/); + spriteBatch.Draw(renderTargetLeft, leftRectangle, Color.White); + spriteBatch.End(); + + spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque/*, null, null, null, distortionShader*/); + spriteBatch.Draw(renderTargetRight, rightRectangle, Color.White); + spriteBatch.End(); + // TODO: implement monoscopic rendering, which will basically just call DrawScene + // once with the full ViewPort and a non-stereo view matrix/projection. + } + + private void DrawSceneForEye(VREye eye, GameTime gameTime, RenderTarget2D renderTarget, IStereoSceneDrawer sceneDrawer) + { + graphicsDeviceManager.GraphicsDevice.SetRenderTarget(renderTarget); + graphicsDeviceManager.GraphicsDevice.DepthStencilState = new DepthStencilState() { DepthBufferEnable = true }; + graphicsDeviceManager.GraphicsDevice.Clear(Color.Navy); + sceneDrawer.DrawScene( + gameTime: gameTime, + viewport: graphicsDeviceManager.GraphicsDevice.Viewport, + // Note: The transform is in view space, but VREye.Translation is in world + // space, so we need to negate it here. + stereoTransform: Matrix.CreateTranslation(Vector3.Negate(eye.Translation)), + view: eye.Transform, + projection: eye.Projection); + } + } + } +} diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/XnaEyeTracker3DInterface.cs b/C3DE/VR/OSVR/OSVR.MonoGame/XnaEyeTracker3DInterface.cs new file mode 100644 index 00000000..182f6b93 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/XnaEyeTracker3DInterface.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.Xna.Framework; +using OSVR.ClientKit; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// XNA Interface for EyeTracker3D data. + /// + public class XnaEyeTracker3DInterface : OSVR.ClientKit.InterfaceAdapter + { + public XnaEyeTracker3DInterface(IInterface iface) + : base(iface) + { } + + protected override XnaEyeTracker3DState Convert(EyeTracker3DState sourceValue) + { + return Math.ConvertEyeTracker3DState(sourceValue); + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/XnaOrientationInterface.cs b/C3DE/VR/OSVR/OSVR.MonoGame/XnaOrientationInterface.cs new file mode 100644 index 00000000..250283c1 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/XnaOrientationInterface.cs @@ -0,0 +1,26 @@ +using Microsoft.Xna.Framework; +using System; +using System.Diagnostics; +using OSVRQuaternion = OSVR.ClientKit.Quaternion; +using XnaQuaternion = Microsoft.Xna.Framework.Quaternion; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// XNA Interface for Orientation data. + /// + public class XnaOrientationInterface : + OSVR.ClientKit.InterfaceAdapter + { + public XnaOrientationInterface(OSVR.ClientKit.IInterface iface) + : base(iface) {} + + protected override XnaQuaternion Convert(OSVRQuaternion sourceValue) + { + return Math.ConvertOrientation(sourceValue); + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/XnaPoseInterface.cs b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPoseInterface.cs new file mode 100644 index 00000000..a1a07d04 --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPoseInterface.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.Xna.Framework; +using OSVR.ClientKit; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// XNA Interface for Pose data. + /// + public class XnaPoseInterface : OSVR.ClientKit.InterfaceAdapter + { + public XnaPoseInterface(IInterface iface) + : base(iface) + { } + + protected override XnaPose Convert(Pose3 sourceValue) + { + return Math.ConvertPose(sourceValue); + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/XnaPosition2DInterface.cs b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPosition2DInterface.cs new file mode 100644 index 00000000..8fdec5ed --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPosition2DInterface.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.Xna.Framework; +using OSVR.ClientKit; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// XNA adapter for 2D interface data. + /// + public class XnaPosition2DInterface : InterfaceAdapter + { + public XnaPosition2DInterface(IInterface iface) + : base(iface) + { } + + protected override Vector2 Convert(Vec2 sourceValue) + { + return Math.ConvertPosition(sourceValue); + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVR/OSVR.MonoGame/XnaPositionInterface.cs b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPositionInterface.cs new file mode 100644 index 00000000..041413ad --- /dev/null +++ b/C3DE/VR/OSVR/OSVR.MonoGame/XnaPositionInterface.cs @@ -0,0 +1,24 @@ +using System; +using Microsoft.Xna.Framework; +using OSVR.ClientKit; + +namespace OSVR +{ + namespace MonoGame + { + /// + /// XNA Interface for Position tracking data. + /// + public class XnaPositionInterface : InterfaceAdapter + { + public XnaPositionInterface(IInterface iface) + : base(iface) + { } + + protected override Vector3 Convert(Vec3 sourceValue) + { + return Math.ConvertPosition(sourceValue); + } + } + } +} \ No newline at end of file diff --git a/C3DE/VR/OSVRService.cs b/C3DE/VR/OSVR/OSVRService.cs similarity index 61% rename from C3DE/VR/OSVRService.cs rename to C3DE/VR/OSVR/OSVRService.cs index ee061dd6..9c0dbf2c 100644 --- a/C3DE/VR/OSVRService.cs +++ b/C3DE/VR/OSVR/OSVRService.cs @@ -4,6 +4,7 @@ using OSVR.ClientKit; using OSVR.RenderManager; using C3DE.Components; +using OSVR.MonoGame; namespace C3DE.VR { @@ -40,6 +41,7 @@ protected override bool SwapBuffers(UIntPtr display) public class OSVRService : GameComponent, IVRDevice { + private DisplayConfig _displayConfig; private RenderManagerOpenGL _renderManager; private ClientContext _context; private GraphicsLibraryOpenGL _graphicsLibrary; @@ -47,10 +49,10 @@ public class OSVRService : GameComponent, IVRDevice private RenderBufferOpenGL[] _buffers; private RenderInfoOpenGL[] _renderInfo; private RenderParams _renderParams; - private int width; - private int height; - private Matrix projectionMatrix; - private Matrix viewMatrix; + private int _width; + private int _height; + private bool _useRenderManager; + private VRHead _head; SpriteEffects IVRDevice.PreviewRenderEffect => SpriteEffects.None; @@ -60,7 +62,20 @@ public OSVRService(Game game, string appIdentifier = "net.demonixis.c3de") ClientContext.PreloadNativeLibraries(); _context = new ClientContext(appIdentifier); + _useRenderManager = !string.IsNullOrEmpty(_context.getStringParameter("/renderManagerConfig")); + _head = new VRHead(null, _context, new XnaPoseInterface(_context.GetPoseInterface("/me/head"))); + _width = Screen.Width / 2; + _height = Screen.Height; + + //if (_useRenderManager) + //SetupRenderManager(); + + game.Components.Add(this); + } + + private void SetupRenderManager() + { _graphicsLibrary = new GraphicsLibraryOpenGL(); _graphicsLibrary.Toolkit = new MonoGameGraphicsToolkit(); _renderManager = new RenderManagerOpenGL(_context, "OpenGL", _graphicsLibrary); @@ -78,14 +93,14 @@ public OSVRService(Game game, string appIdentifier = "net.demonixis.c3de") for (var i = 0; i < _renderInfo.Length; i++) { w += _renderInfo[i].Viewport.Width; - if (height != 0 && height != _renderInfo[i].Viewport.Height) + if (_height != 0 && _height != _renderInfo[i].Viewport.Height) throw new InvalidOperationException("All RT must have the same height."); h = _renderInfo[i].Viewport.Height; } - width = (int)w; - height = (int)h; + _width = (int)w; + _height = (int)h; _normalizedCroppingViewports = new ViewportDescription[_renderInfo.Length]; @@ -110,51 +125,17 @@ public override void Update(GameTime gameTime) { base.Update(gameTime); _context.update(); - - var displayConfig = _context.GetDisplayConfig(); - - if (displayConfig == null || !displayConfig.CheckDisplayStartup()) - return; - - var numViewers = displayConfig.GetNumViewers(); - for (uint viewer = 0; viewer < numViewers; viewer++) - { - var numEyes = displayConfig.GetNumEyesForViewer(viewer); - var viewerPose = displayConfig.GetViewerPose(viewer); - - for (byte eye = 0; eye < numEyes; eye++) - { - var numSurfaces = displayConfig.GetNumSurfacesForViewerEye(viewer, eye); - var viewerEyePose = displayConfig.GetViewerEyePose(viewer, eye); - var viewerEyeMatrixf = displayConfig.GetViewerEyeViewMatrixf(viewer, eye, MatrixConventionsFlags.Default); - - for (uint surface = 0; surface < numSurfaces; surface++) - { - var viewport = displayConfig.GetRelativeViewportForViewerEyeSurface(viewer, eye, surface); - var wantsDistortion = displayConfig.DoesViewerEyeSurfaceWantDistortion(viewer, eye, surface); - - if (wantsDistortion) - { - var radialDistortionPriority = displayConfig.GetViewerEyeSurfaceRadialDistortionPriority(viewer, eye, surface); - - if (radialDistortionPriority >= 0) - { - var distortionParameters = displayConfig.GetViewerEyeSurfaceRadialDistortion(viewer, eye, surface); - } - } - - var projectionf = displayConfig.GetProjectionMatrixForViewerEyeSurfacef(viewer, eye, surface, 1.0f, 1000.0f, MatrixConventionsFlags.Default); - var projectionClippingPlanes = displayConfig.GetViewerEyeSurfaceProjectionClippingPlanes(viewer, eye, surface); - var displayInputIndex = displayConfig.GetViewerEyeSurfaceDisplayInputIndex(viewer, eye, surface); - } - } - } + _head.Update(); } public RenderTarget2D CreateRenderTargetForEye(int eye) { - var renderTarget = new RenderTarget2D(Game.GraphicsDevice, (int)width, (int)height, false, SurfaceFormat.ColorSRgb, DepthFormat.Depth24Stencil8); + var renderTarget = new RenderTarget2D(Game.GraphicsDevice, (int)_width, (int)_height, false, SurfaceFormat.ColorSRgb, DepthFormat.Depth24Stencil8); + #if DESKTOP + if (_buffers == null) + _buffers = new RenderBufferOpenGL[2]; + var info = typeof(RenderTarget2D).GetField("glTexture", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var glTexture = (int)info.GetValue(renderTarget); _buffers[eye].ColorBufferName = (uint)glTexture; @@ -164,7 +145,7 @@ public RenderTarget2D CreateRenderTargetForEye(int eye) public Matrix GetProjectionMatrix(int eye) { - return Camera.main.projection; + return eye == 0 ? _head.LeftEye.Projection : _head.RightEye.Projection; } public float GetRenderTargetAspectRatio(int eye) @@ -174,12 +155,12 @@ public float GetRenderTargetAspectRatio(int eye) public Matrix GetViewMatrix(int eye, Matrix playerScale) { - return Camera.main.view; + return eye == 0 ? _head.LeftEye.Transform : _head.RightEye.Transform; } public int SubmitRenderTargets(RenderTarget2D leftRT, RenderTarget2D rightRT) { - _renderManager.Present(_buffers, _renderInfo, _normalizedCroppingViewports, _renderParams, false); + // _renderManager.Present(_buffers, _renderInfo, _normalizedCroppingViewports, _renderParams, false); return 0; } } diff --git a/C3DE/VR/OculusRift.cs b/C3DE/VR/Oculus/OculusRift.cs similarity index 76% rename from C3DE/VR/OculusRift.cs rename to C3DE/VR/Oculus/OculusRift.cs index 32e253f6..61af010c 100644 --- a/C3DE/VR/OculusRift.cs +++ b/C3DE/VR/Oculus/OculusRift.cs @@ -46,24 +46,33 @@ public class OculusRift private Point[] RenderTargetRes = new Point[2]; // one for each eye private HeadTracking HeadTracking; private IntPtr[] renderTargetPtrs = new IntPtr[2]; -#if WINDOWS + private int[] renderTargetIds = new int[2]; private HmdInfo HmdInfo; private GraphicsDevice _graphicsDevice; -#endif + // the following functions should be called in order public int Initialize(GraphicsDevice graphics) { -#if WINDOWS _graphicsDevice = graphics; +#if !WINDOWS && !DESKTOP + return 0; +#endif + + var result = 0; + +#if WINDOWS IntPtr dxDevice, dxContext; _graphicsDevice.GetNativeDxDeviceAndContext(out dxDevice, out dxContext); - var result = NativeRift.Initialize(dxDevice, dxContext); + result = NativeRift.InitializeDX(dxDevice, dxContext); if (result < 0) return result; - - +#elif DESKTOP + result = NativeRift.InitializeGL(); + if (result < 0) + return result; +#endif HmdInfo = NativeRift.GetHmdInfo(); var fovLeft = HmdInfo.DefaultFovLeft; @@ -75,67 +84,78 @@ public int Initialize(GraphicsDevice graphics) RenderTargetRes[0] = recommendTexResLeft; RenderTargetRes[1] = recommendTexResRight; - +#if WINDOWS result = NativeRift.CreateDXSwapChains(recommendTexResLeft, recommendTexResRight, fovLeft, fovRight); if (result < 0) return result; +#else + result = NativeRift.CreateGLSwapChains(recommendTexResLeft, recommendTexResRight, fovLeft, fovRight); + if (result < 0) + return result; +#endif - /* - var ret = NativeRift.CreateDXSwapChainsAlt(); - if (ret != 0) - return -1; - */ for (var eye = 0; eye < 2; eye++) ProjectionMatrix[eye] = NativeRift.GetProjectionMatrix(eye, 0.1f, 1000, 0); return 0; -#else - return -1; -#endif } public RenderTarget2D CreateRenderTargetForEye(int eye, SurfaceFormat surfaceFormat = SurfaceFormat.ColorSRgb, DepthFormat depthFormat = DepthFormat.Depth24Stencil8) { -#if WINDOWS var renderTarget = new RenderTarget2D(_graphicsDevice, RenderTargetRes[eye].X, RenderTargetRes[eye].Y, false, surfaceFormat, depthFormat); +#if WINDOWS var info = typeof(RenderTarget2D).GetField("_texture", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); var value = (SharpDX.Direct3D11.Resource)info.GetValue(renderTarget); renderTargetPtrs[eye] = value.NativePointer; - - return renderTarget; -#else - return null; +#elif DESKTOP + var info = typeof(RenderTarget2D).GetField("glTexture", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); + renderTargetIds[eye] = (int)info.GetValue(renderTarget); #endif + return renderTarget; } public HeadTracking TrackHead(int frame = 0) { +#if !WINDOWS && !DESKTOP + return HeadTracking; +#endif return HeadTracking = NativeRift.TrackHead(frame); } public int SubmitRenderTargets(RenderTarget2D rtLeft, RenderTarget2D rtRight, int frame = 0) { #if WINDOWS - return NativeRift.SubmitRenderTargets(renderTargetPtrs[0], renderTargetPtrs[1], frame); + return NativeRift.SubmitRenderTargetsDX(renderTargetPtrs[0], renderTargetPtrs[1], frame); +#elif DESKTOP + return NativeRift.SubmitRenderTargsGL(renderTargetIds[0], renderTargetIds[1], frame); #else - return -1; + return 0; #endif } public void Shutdown() { +#if !WINDOWS && !DESKTOP + return; +#endif NativeRift.Shutdown(); } // matrices for rendering public Matrix GetEyePose(int eye, Matrix playerPose) { - var mat = Matrix.Transpose(eye == 0 ? HeadTracking.EyePoseLeft : HeadTracking.EyePoseRight); +#if !WINDOWS && !DESKTOP + return Components.Camera.main.view; +#endif + var mat = Matrix.Transpose(eye == 0 ? HeadTracking.EyePoseLeft : HeadTracking.EyePoseRight); return mat * playerPose; } public Matrix GetEyeViewMatrix(int eye, Matrix playerPose) { +#if !WINDOWS && !DESKTOP + return Components.Camera.main.projection; +#endif return Matrix.Invert(GetEyePose(eye, playerPose)); } @@ -155,7 +175,10 @@ public float GetRenderTargetAspectRatio(int eye) public static class NativeRift { [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int Initialize(IntPtr dxDevice, IntPtr dxContext); + public static extern int InitializeGL(); + + [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int InitializeDX(IntPtr dxDevice, IntPtr dxContext); [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] public static extern HmdInfo GetHmdInfo(); @@ -164,10 +187,10 @@ public static class NativeRift public static extern void GetRecommendedRenderTargetRes(FovPort fovLeft, FovPort fovRight, float pixelsPerDisplayPixel, ref Point texResLeft, ref Point texResRight); [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int CreateDXSwapChains(Point texResLeft, Point texResRight, FovPort fovLeft, FovPort fovRight); + public static extern int CreateGLSwapChains(Point texResLeft, Point texResRight, FovPort fovLeft, FovPort fovRight); - [DllImport("OculusRift.dll", CallingConvention = CallingConvention.StdCall)] - public static extern int CreateDXSwapChainsAlt(); + [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int CreateDXSwapChains(Point texResLeft, Point texResRight, FovPort fovLeft, FovPort fovRight); [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] public static extern Matrix GetProjectionMatrix(int eye, float nearClip, float farClip, uint projectionModeFlags); @@ -176,7 +199,10 @@ public static class NativeRift public static extern HeadTracking TrackHead(int frame); [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] - public static extern int SubmitRenderTargets(IntPtr dxTexResourceLeft, IntPtr dxTexResourceRight, int frame); + public static extern int SubmitRenderTargsGL(int rtLeft, int rtRight, int frame); + + [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] + public static extern int SubmitRenderTargetsDX(IntPtr dxTexResourceLeft, IntPtr dxTexResourceRight, int frame); [DllImport("OculusRift.dll", CallingConvention = CallingConvention.Cdecl)] public static extern void Shutdown(); diff --git a/C3DE/VR/OculusRiftService.cs b/C3DE/VR/Oculus/OculusRiftService.cs similarity index 100% rename from C3DE/VR/OculusRiftService.cs rename to C3DE/VR/Oculus/OculusRiftService.cs diff --git a/C3DE/VR/OculusWrapService.cs b/C3DE/VR/Oculus/OculusWrapService.cs similarity index 100% rename from C3DE/VR/OculusWrapService.cs rename to C3DE/VR/Oculus/OculusWrapService.cs diff --git a/C3DE/VR/OpenVRService.cs b/C3DE/VR/OpenVR/OpenVRService.cs similarity index 97% rename from C3DE/VR/OpenVRService.cs rename to C3DE/VR/OpenVR/OpenVRService.cs index 8450ea4b..435eeabc 100644 --- a/C3DE/VR/OpenVRService.cs +++ b/C3DE/VR/OpenVR/OpenVRService.cs @@ -2,7 +2,6 @@ using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Valve.VR; -using C3DE.Components; using System.Runtime.InteropServices; namespace C3DE.VR @@ -175,10 +174,10 @@ public static class OpenVRExtension public static Matrix ToXNA(this HmdMatrix34_t mat) { var m = new Matrix( - mat.m0, mat.m4, -mat.m8, 0.0f, - mat.m1, mat.m5, -mat.m9, 0.0f, - -mat.m2, -mat.m6, mat.m10, 0.0f, - mat.m3, mat.m7, -mat.m11, 1.0f); + mat.m0, mat.m4, mat.m8, 0.0f, + mat.m1, mat.m5, mat.m9, 0.0f, + mat.m2, mat.m6, mat.m10, 0.0f, + mat.m3, mat.m7, mat.m11, 1.0f); return m; } diff --git a/C3DE/VR/openvr_api.cs b/C3DE/VR/OpenVR/openvr_api.cs similarity index 100% rename from C3DE/VR/openvr_api.cs rename to C3DE/VR/OpenVR/openvr_api.cs diff --git a/C3DE/packages.config b/C3DE/packages.config new file mode 100644 index 00000000..e1fae9c6 --- /dev/null +++ b/C3DE/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Deps/OculusRift.dll b/Deps/OculusRift.dll index 8284b5f39912af35ab7351636084c145468cade1..0d2d0703c3e39df10be74203acafe9b1d4deeec7 100644 GIT binary patch delta 46641 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 BLk0i< literal 212480 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

$QB>XD{-{v8s%E{b?jMsoR{7wm!MK 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

ewCGLj!G>ylf2@p?}$FT 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 z z9sA}w_N``hY*)8U?JN0qWx#jVzpAsyUcfd{ zut*W?(8#rM{yc}8Hxu(*1+Lx3`-53WVGfHhdyQbt{$R@XOvN}XITw|v&5z4_RiE{! zJewSb?Bmp!UHq7$u8gt8Yj;0aDHc8UFNOz{a+%=!1x`g>jM!f4*ti0$|8G`qz-XGl z{XJl&d0?ewV5Ga0Ca}@{V4|Ih513}LS_ciL9lECqEEYmd_W{o0fv|E^afb{S&=iGP du0TcBiYpOesJt?Pkt$SJt@gE^-(SuQ{3krKP~ZRn