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); }
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; }
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; }
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); }
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; }