Пример #1
0
        /// <summary>
        ///
        /// </summary>
        public override void Prepare()
        {
            double displayMidpoint = hmd.GetPredictedDisplayTime(frameIndex);

            OVR.TrackingState trackingState = hmd.GetTrackingState(displayMidpoint);
            eyePoses = new OVR.Posef[2];


            ////////////////// Get Eye poses //////////////////////////////////////////////////////////////////////////
            var leftEyeRenderDesc  = hmd.GetRenderDesc(OVR.EyeType.Left, hmd.DefaultEyeFov[0]);
            var rightEyeRenderDesc = hmd.GetRenderDesc(OVR.EyeType.Right, hmd.DefaultEyeFov[1]);

            var eyeRenderDescs = new [] { leftEyeRenderDesc, rightEyeRenderDesc };

            OVR.Vector3f[] hmdToEyeOffset = { leftEyeRenderDesc.HmdToEyeOffset, rightEyeRenderDesc.HmdToEyeOffset };

            hmd.GetEyePoses(frameIndex, 1, hmdToEyeOffset, eyePoses, out sampleTime);
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////

            var left = new OculusRiftSensors.Eye {
                Position = eyePoses[0].Position.ToVector3(),
                Rotation = eyePoses[0].Orientation.ToQuaternion(),
            };

            var right = new OculusRiftSensors.Eye {
                Position = eyePoses[1].Position.ToVector3(),
                Rotation = eyePoses[1].Orientation.ToQuaternion(),
            };


            var leftProj = oculus.Matrix4f_Projection(eyeRenderDescs[0].Fov, 0.1f, 1000.0f, OVR.ProjectionModifier.None).ToMatrix();

            leftProj.Transpose();
            var rightProj = oculus.Matrix4f_Projection(eyeRenderDescs[1].Fov, 0.1f, 1000.0f, OVR.ProjectionModifier.None).ToMatrix();

            rightProj.Transpose();

            left.Projection  = leftProj;
            right.Projection = rightProj;

            OculusRiftSensors.LeftEye      = left;
            OculusRiftSensors.RightEye     = right;
            OculusRiftSensors.HeadPosition = trackingState.HeadPose.ThePose.Position.ToVector3();
            OculusRiftSensors.HeadRotation = trackingState.HeadPose.ThePose.Orientation.ToQuaternion();
        }
Пример #2
0
        /// <summary>
        ///
        /// </summary>
        public override void Prepare()
        {
            hmd.BeginFrame(0);

            OVR.EyeType eye = hmd.EyeRenderOrder[0];
            eyeRenderPose[(int)eye] = hmd.GetHmdPosePerEye(eye);
            eye = hmd.EyeRenderOrder[1];
            eyeRenderPose[(int)eye] = hmd.GetHmdPosePerEye(eye);

            var trackingState = hmd.GetTrackingState(oculus.GetTimeInSeconds());
            var hPos          = trackingState.HeadPose.ThePose.Position;
            var hRot          = trackingState.HeadPose.ThePose.Orientation;

            var left = new OculusRiftSensors.Eye {
                Position = new Vector3(eyeRenderPose[0].Position.X, eyeRenderPose[0].Position.Y, eyeRenderPose[0].Position.Z),
                Rotation = new Quaternion(eyeRenderPose[0].Orientation.X, eyeRenderPose[0].Orientation.Y, eyeRenderPose[0].Orientation.Z, eyeRenderPose[0].Orientation.W),
            };

            var right = new OculusRiftSensors.Eye {
                Position = new Vector3(eyeRenderPose[1].Position.X, eyeRenderPose[1].Position.Y, eyeRenderPose[1].Position.Z),
                Rotation = new Quaternion(eyeRenderPose[1].Orientation.X, eyeRenderPose[1].Orientation.Y, eyeRenderPose[1].Orientation.Z, eyeRenderPose[1].Orientation.W),
            };


            var leftProj = oculus.Matrix4f_Projection(eyeRenderDesc[0].Fov, 0.1f, 1000.0f, true).ToMatrix();

            leftProj.Transpose();
            var rightProj = oculus.Matrix4f_Projection(eyeRenderDesc[1].Fov, 0.1f, 1000.0f, true).ToMatrix();

            rightProj.Transpose();


            left.Projection  = leftProj;
            right.Projection = rightProj;

            OculusRiftSensors.LeftEye      = left;
            OculusRiftSensors.RightEye     = right;
            OculusRiftSensors.HeadPosition = new Vector3(hPos.X, hPos.Y, hPos.Z);
            OculusRiftSensors.HeadRotation = new Quaternion(hRot.X, hRot.Y, hRot.Z, hRot.W);

            //Console.WriteLine("Cam pose: " + trackingState.CameraPose.Position.X + " " + trackingState.CameraPose.Position.Y + " " +trackingState.CameraPose.Position.Z);
            //Console.WriteLine("Leveled Cam pose: " + trackingState.LeveledCameraPose.Position.X + " " + trackingState.LeveledCameraPose.Position.Y + " " + trackingState.LeveledCameraPose.Position.Z);
        }