예제 #1
0
        private void SendHeadTrackingDataToVridge()
        {
            switch (SelectedHeadTrackingMode)
            {
            case TrackingType.Position:
                headTrackingService?.SendPositionOnly(PositionX, PositionY, PositionZ);
                break;

            case TrackingType.PositionAndRotation:
                headTrackingService?.SendRotationAndPosition(Yaw, Pitch, Roll, PositionX, PositionY, PositionZ);
                break;

            case TrackingType.SyncOffset:
                headTrackingService?.UpdateOffsetMatrix(Yaw, Pitch, Roll, PositionX, PositionY, PositionZ);
                break;

            case TrackingType.AsyncOffset:
                headTrackingService?.SendAsyncOffset(Yaw, Pitch, Roll);
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            // Mark HMD as in/out of tracking range when it crosses tracking bounds
            var isHmdTracked = Math.Abs(PositionX) <= 3 && Math.Abs(PositionZ) <= 3;

            if (wasHMDTracked && !isHmdTracked)
            {
                headTrackingService?.ChangeStatus(false);
                wasHMDTracked = false;
            }

            if (!wasHMDTracked && isHmdTracked)
            {
                headTrackingService?.ChangeStatus(true);
                wasHMDTracked = true;
            }
        }