Beispiel #1
0
        private void adjustViewMatrix(Camera.StereoscopicEye eye, float baselineAdjust)
        {
            float   eyeOffset              = eye == Camera.StereoscopicEye.Left ? 1 : -1;
            Vector3 ipdOffset              = eyeOffset * Vector3.right * baselineAdjust * 0.5f;
            Vector3 providerForwardOffset  = Vector3.zero,
                    providerVerticalOffset = Vector3.zero;
            Quaternion providerRotation    = Quaternion.Euler(0f, 180f, 0f);

            if (_provider is LeapXRServiceProvider || _provider.GetType().BaseType == typeof(LeapXRServiceProvider))
            {
                LeapXRServiceProvider _xrProvider = _provider as LeapXRServiceProvider;
                providerForwardOffset  = Vector3.forward * _xrProvider.deviceOffsetZAxis;
                providerVerticalOffset = -Vector3.up * _xrProvider.deviceOffsetYAxis;
                providerRotation       = Quaternion.AngleAxis(_xrProvider.deviceTiltXAxis, Vector3.right);
            }
            else
            {
                Matrix4x4 imageMatWarp = _camera.projectionMatrix
                                         * Matrix4x4.TRS(Vector3.zero, providerRotation, Vector3.one)
                                         * _camera.projectionMatrix.inverse;
                Shader.SetGlobalMatrix("_LeapGlobalWarpedOffset", imageMatWarp);
            }

            var existingMatrix = _camera.GetStereoViewMatrix(eye);

            _camera.SetStereoViewMatrix(eye, Matrix4x4.TRS(Vector3.zero, providerRotation, Vector3.one) *
                                        Matrix4x4.Translate(providerForwardOffset + ipdOffset) *
                                        Matrix4x4.Translate(providerVerticalOffset) *
                                        existingMatrix);
        }
        public override void OnSceneGUI()
        {
            LeapXRServiceProvider xrProvider = target as LeapXRServiceProvider;

            if (serializedObject.FindProperty("_deviceOffsetMode").enumValueIndex == 2 &&
                xrProvider.deviceOrigin != null)
            {
                controllerOffset = xrProvider.transform.InverseTransformPoint(xrProvider.deviceOrigin.position);
                deviceRotation   = Quaternion.Inverse(xrProvider.transform.rotation) *
                                   xrProvider.deviceOrigin.rotation *
                                   Quaternion.Euler(90f, 0f, 0f);
            }
            else
            {
                var vrProvider = target as LeapXRServiceProvider;

                deviceRotation = Quaternion.Euler(90f, 0f, 0f) *
                                 Quaternion.Euler(vrProvider.deviceTiltXAxis, 0f, 0f);

                controllerOffset = new Vector3(0f,
                                               vrProvider.deviceOffsetYAxis,
                                               vrProvider.deviceOffsetZAxis);
            }

            base.OnSceneGUI();
        }
 /// <summary>
 /// Copies property settings from this LeapServiceProvider to the target
 /// LeapXRServiceProvider where applicable. Does not modify any XR-specific settings
 /// that only exist on the LeapXRServiceProvider.
 /// </summary>
 public void CopySettingsToLeapXRServiceProvider(
     LeapXRServiceProvider leapXRServiceProvider)
 {
     leapXRServiceProvider._frameOptimization        = _frameOptimization;
     leapXRServiceProvider._physicsExtrapolation     = _physicsExtrapolation;
     leapXRServiceProvider._physicsExtrapolationTime = _physicsExtrapolationTime;
     leapXRServiceProvider._workerThreadProfiling    = _workerThreadProfiling;
 }
        public override void OnSceneGUI()
        {
            LeapXRServiceProvider xrProvider = target as LeapXRServiceProvider;

            if (_mainCamera.objectReferenceValue == null)
            {
                return;
            }

            controllerOffset = new Vector3(0f,
                                           xrProvider.deviceOffsetYAxis,
                                           xrProvider.deviceOffsetZAxis);

            deviceRotation = xrProvider.mainCamera.transform.InverseTransformRotation(xrProvider.mainCamera.transform.TransformRotation(Quaternion.Euler(xrProvider.deviceTiltXAxis, 0f, 0f))) * Quaternion.Euler(90f, 0f, 0f);


            base.OnSceneGUI();
        }
        public virtual void OnSceneGUI()
        {
            if (target == null)
            {
                return;
            }

            Transform             targetTransform = target.transform;
            LeapXRServiceProvider xrProvider      = target as LeapXRServiceProvider;

            if (xrProvider != null)
            {
                targetTransform = xrProvider.mainCamera.transform;

                if (xrProvider.deviceOrigin != null)
                {
                    targetTransform.InverseTransformPoint(xrProvider.deviceOrigin.position);
                }
            }

            switch (GetSelectedInteractionVolume())
            {
            case LeapServiceProvider.InteractionVolumeVisualization.None:
                break;

            case LeapServiceProvider.InteractionVolumeVisualization.LeapMotionController:
                DrawLeapMotionControllerInteractionZone(LMC_BOX_WIDTH, LMC_BOX_DEPTH, LMC_BOX_RADIUS, Color.white, targetTransform);
                break;

            case LeapServiceProvider.InteractionVolumeVisualization.StereoIR170:
                DrawStereoIR170InteractionZoneMesh(targetTransform);
                break;

            case LeapServiceProvider.InteractionVolumeVisualization.Automatic:
                DetectConnectedDevice(targetTransform);
                break;

            default:
                break;
            }
        }