コード例 #1
0
        /// <inheritdoc />
        public override void Update()
        {
            base.Update();

            if (handDataProvider.TryGetHandData(Handedness.Left, RenderingMode == HandRenderingMode.Mesh, MinConfidenceRequired, out var leftHandData))
            {
                var controller = GetOrAddController(Handedness.Left);
                leftHandData = postProcessor.PostProcess(Handedness.Left, leftHandData);
                controller?.UpdateController(leftHandData);
            }
            else
            {
                RemoveController(Handedness.Left);
            }

            if (handDataProvider.TryGetHandData(Handedness.Right, RenderingMode == HandRenderingMode.Mesh, MinConfidenceRequired, out var rightHandData))
            {
                var controller = GetOrAddController(Handedness.Right);
                rightHandData = postProcessor.PostProcess(Handedness.Right, rightHandData);
                controller?.UpdateController(rightHandData);
            }
            else
            {
                RemoveController(Handedness.Right);
            }
        }
        /// <inheritdoc/>
        public override void Update()
        {
            base.Update();

            var sources = GetDetectedSources();

            for (var i = 0; i < sources.Count; i++)
            {
                var sourceState = sources[i];
                var spatialInteractionSource = sourceState.Source;

                if (!TryGetController(spatialInteractionSource.Id, out BaseController controller))
                {
                    controller = CreateController(spatialInteractionSource);
                }

                if (controller != null && controller is MixedRealityHandController)
                {
                    if (handDataProvider.TryGetHandData(sourceState, RenderingMode == HandRenderingMode.Mesh, out var handData))
                    {
                        ((MixedRealityHandController)controller).UpdateController(postProcessor.PostProcess(spatialInteractionSource.Handedness.ToHandedness(), handData));
                        preservedSpatialInteractionSourceIdCache.Add(spatialInteractionSource.Id);
                    }
                }
                else if (controller != null)
                {
                    ((WindowsMixedRealityMotionController)controller).UpdateController(sourceState);
                    preservedSpatialInteractionSourceIdCache.Add(spatialInteractionSource.Id);
                }
            }

            RemoveUntrackedControllers();
            preservedSpatialInteractionSourceIdCache.Clear();
        }
コード例 #3
0
        /// <inheritdoc />
        protected override void UpdateSimulatedController(IMixedRealitySimulatedController simulatedController)
        {
            // Ignore updates if the simulated controllers are not tracked, but only visible.
            if (simulatedController.ControllerHandedness == Handedness.Left && !LeftControllerIsTracked)
            {
                return;
            }
            else if (simulatedController.ControllerHandedness == Handedness.Right && !RightControllerIsTracked)
            {
                return;
            }

            var simulatedHandController = (MixedRealityHandController)simulatedController;
            var converter = simulatedHandController.ControllerHandedness == Handedness.Left
                ? leftHandConverter
                : rightHandConverter;

            var simulatedHandData = converter.GetSimulatedHandData(
                simulatedController.GetPosition(DepthMultiplier),
                simulatedController.GetDeltaRotation(RotationSpeed));

            simulatedHandData = postProcessor.PostProcess(simulatedHandController.ControllerHandedness, simulatedHandData);
            simulatedHandController.UpdateController(simulatedHandData);
        }