Esempio n. 1
0
        private bool ReadTrackIRData(ref InternalHeadPoseData output)
        {
            if (trackIRWorker == null)
            {
                trackIRWorker = SetupRealTrackIRDll();
            }

            var trackirData = freepieData.Read(x => x.TrackIRData);

            if (DateTime.Now - new DateTime(trackirData.LastUpdatedTicks) > TimeSpan.FromSeconds(WorkerProcessTimeout))
            {
                trackIRWorker.Dispose();
                throw new Exception("Lost contact with worker process.");
            }

            var data = trackirData.RealTrackIRData;

            if (data.FrameSignature == lastFrame || data.FrameSignature == 0)
            {
                return(false);
            }

            output = new InternalHeadPoseData {
                Yaw = data.Yaw, Pitch = data.Pitch, Roll = data.Roll, X = data.X, Y = data.Y, Z = data.Z
            };

            lastFrame = data.FrameSignature;

            return(true);
        }
Esempio n. 2
0
        private void DecodeTrackIRIntoDegrees(InternalHeadPoseData data)
        {
            data.Yaw   = -(data.Yaw * 180.0f) / 16384.0f;
            data.Pitch = -(data.Pitch * 180.0f) / 16384.0f;
            data.Roll  = -(data.Roll * 180.0f) / 16384.0f;

            data.X = -data.X / 64.0f;
            data.Y = data.Y / 64.0f;
            data.Z = data.Z / 64.0f;
        }
Esempio n. 3
0
        private void DecodeTrackIRIntoDegrees(InternalHeadPoseData data)
        {
            data.Yaw = -(data.Yaw * 180.0f) / 16384.0f;
            data.Pitch = -(data.Pitch * 180.0f) / 16384.0f;
            data.Roll = -(data.Roll * 180.0f) / 16384.0f;

            data.X = -data.X / 64.0f;
            data.Y = data.Y / 64.0f;
            data.Z = data.Z / 64.0f;
        }
Esempio n. 4
0
        public bool ReadPosition(ref HeadPoseData output)
        {
            var headpose = new InternalHeadPoseData();

            if (!ReadTrackIRData(ref headpose))
                return false;

            DecodeTrackIRIntoDegrees(headpose);

            output = new HeadPoseData { Yaw = headpose.Yaw, Pitch = headpose.Pitch, Roll = headpose.Roll, X = headpose.X, Y = headpose.Y, Z = headpose.Z };

            return true;
        }
Esempio n. 5
0
        public bool ReadPosition(ref HeadPoseData output)
        {
            var headpose = new InternalHeadPoseData();

            if (!ReadTrackIRData(ref headpose))
            {
                return(false);
            }

            DecodeTrackIRIntoDegrees(headpose);

            output = new HeadPoseData {
                Yaw = headpose.Yaw, Pitch = headpose.Pitch, Roll = headpose.Roll, X = headpose.X, Y = headpose.Y, Z = headpose.Z
            };

            return(true);
        }
Esempio n. 6
0
        private bool ReadTrackIRData(ref InternalHeadPoseData output)
        {
            if (trackIRWorker == null)
                trackIRWorker = SetupRealTrackIRDll();

            var trackirData = freepieData.Read(x => x.TrackIRData);

            if (DateTime.Now - new DateTime(trackirData.LastUpdatedTicks) > TimeSpan.FromSeconds(WorkerProcessTimeout))
            {
                trackIRWorker.Dispose();
                throw new Exception("Lost contact with worker process.");
            }

            var data = trackirData.RealTrackIRData;

            if (data.FrameSignature == lastFrame || data.FrameSignature == 0)
                return false;

            output = new InternalHeadPoseData { Yaw = data.Yaw, Pitch = data.Pitch, Roll = data.Roll, X = data.X, Y = data.Y, Z = data.Z };

            lastFrame = data.FrameSignature;

            return true;
        }