Exemple #1
0
        private bool CheckLayers(DualCameraIndex cameraIndex)
        {
            if (ViveSR_DualCameraRig.Instance == null || ViveSR_DualCameraRig.Instance == null)
            {
                return(false);
            }
            string layername = cameraIndex == DualCameraIndex.LEFT ? LefteyeLayerName : RighteyeLayerName;
            int    mask      = LayerMask.GetMask(layername);
            int    layer     = LayerMask.NameToLayer(layername);
            Camera cam       = cameraIndex == DualCameraIndex.LEFT ?
                               ViveSR_DualCameraRig.Instance.DualCameraLeft :
                               ViveSR_DualCameraRig.Instance.DualCameraRight;
            ViveSR_TrackedCamera trackedCam = cameraIndex == DualCameraIndex.LEFT ?
                                              ViveSR_DualCameraRig.Instance.TrackedCameraLeft :
                                              ViveSR_DualCameraRig.Instance.TrackedCameraRight;
            ViveSR_TrackedCamera trackedCamAnother = cameraIndex == DualCameraIndex.LEFT ?
                                                     ViveSR_DualCameraRig.Instance.TrackedCameraRight :
                                                     ViveSR_DualCameraRig.Instance.TrackedCameraLeft;


            if (cam.cullingMask != mask)
            {
                return(false);
            }
            if (trackedCam.gameObject.layer != layer)
            {
                return(false);
            }
            if (trackedCam.Anchor.gameObject.layer != layer)
            {
                return(false);
            }
            if (trackedCam.DepthImageOccluder.gameObject.layer != layer)
            {
                return(false);
            }
            if (trackedCam.ImagePlane.gameObject.layer != layer)
            {
                return(false);
            }
            if (trackedCamAnother.ImagePlaneCalibration.gameObject.layer != layer)
            {
                return(false);
            }
            return(true);
        }
        private void UpdateSeeThroCamLayers(DualCameraIndex cameraIndex)
        {
            string layername = cameraIndex == DualCameraIndex.LEFT ? LefteyeLayerName : RighteyeLayerName;
            int    mask      = LayerMask.GetMask(layername);
            int    layer     = LayerMask.NameToLayer(layername);
            ViveSR_DualCameraRig prefabRig = PrefabUtility.GetCorrespondingObjectFromSource(ViveSR_DualCameraRig.Instance) as ViveSR_DualCameraRig;

            Camera cam = cameraIndex == DualCameraIndex.LEFT ?
                         prefabRig.DualCameraLeft :
                         prefabRig.DualCameraRight;
            ViveSR_TrackedCamera trackedCam = cameraIndex == DualCameraIndex.LEFT ?
                                              prefabRig.TrackedCameraLeft :
                                              prefabRig.TrackedCameraRight;
            ViveSR_TrackedCamera trackedCamAnother = cameraIndex == DualCameraIndex.LEFT ?
                                                     prefabRig.TrackedCameraRight :
                                                     prefabRig.TrackedCameraLeft;

            cam.cullingMask                        = mask;
            trackedCam.gameObject.layer            = layer;
            trackedCam.Anchor.gameObject.layer     = layer;
            trackedCam.ImagePlane.gameObject.layer = layer;
            trackedCamAnother.ImagePlaneCalibration.gameObject.layer = layer;
        }
        /// <summary>
        /// Load the custom calibration parameters from  DualCameraParameters.xml.
        /// </summary>
        public void LoadDeviceParameter()
        {
            foreach (DualCameraIndex camIndex in Enum.GetValues(typeof(DualCameraIndex)))
            {
                ViveSR_TrackedCamera trackedCamera = camIndex == DualCameraIndex.LEFT ? ViveSR_DualCameraRig.Instance.TrackedCameraLeft :
                                                     ViveSR_DualCameraRig.Instance.TrackedCameraRight;
                if (trackedCamera != null)
                {
                    int camValue = camIndex == DualCameraIndex.LEFT ? 0 : 1;
                    trackedCamera.Anchor.transform.localPosition = new Vector3(0,
                                                                               -ViveSR_DualCameraImageCapture.OffsetHeadToCamera[camValue * 3 + 1],
                                                                               -ViveSR_DualCameraImageCapture.OffsetHeadToCamera[camValue * 3 + 2]);

                    for (int planeIndex = 0; planeIndex < 2; planeIndex++)
                    {
                        ViveSR_DualCameraImagePlane imagePlane = planeIndex == 0 ? trackedCamera.ImagePlane :
                                                                 trackedCamera.ImagePlaneCalibration;
                        if (imagePlane != null)
                        {
                            imagePlane.DistortedImageWidth    = ViveSR_DualCameraImageCapture.DistortedImageWidth;
                            imagePlane.DistortedImageHeight   = ViveSR_DualCameraImageCapture.DistortedImageHeight;
                            imagePlane.UndistortedImageWidth  = ViveSR_DualCameraImageCapture.UndistortedImageWidth;
                            imagePlane.UndistortedImageHeight = ViveSR_DualCameraImageCapture.UndistortedImageHeight;
                            if (camIndex == DualCameraIndex.LEFT)
                            {
                                imagePlane.DistortedCx     = ViveSR_DualCameraImageCapture.DistortedCx_L;
                                imagePlane.DistortedCy     = ViveSR_DualCameraImageCapture.DistortedCy_L;
                                imagePlane.UndistortedCx   = ViveSR_DualCameraImageCapture.UndistortedCx_L;
                                imagePlane.UndistortedCy   = ViveSR_DualCameraImageCapture.UndistortedCy_L;
                                imagePlane.FocalLength     = ViveSR_DualCameraImageCapture.FocalLength_L;
                                imagePlane.UndistortionMap = ViveSR_DualCameraImageCapture.UndistortionMap_L;
                            }
                            else if (camIndex == DualCameraIndex.RIGHT)
                            {
                                imagePlane.DistortedCx     = ViveSR_DualCameraImageCapture.DistortedCx_R;
                                imagePlane.DistortedCy     = ViveSR_DualCameraImageCapture.DistortedCy_R;
                                imagePlane.UndistortedCx   = ViveSR_DualCameraImageCapture.UndistortedCx_R;
                                imagePlane.UndistortedCy   = ViveSR_DualCameraImageCapture.UndistortedCy_R;
                                imagePlane.FocalLength     = ViveSR_DualCameraImageCapture.FocalLength_R;
                                imagePlane.UndistortionMap = ViveSR_DualCameraImageCapture.UndistortionMap_R;
                            }
                        }
                    }
                }
            }
            ViveSR_DualCameraRig.Instance.HMDCameraShifter.CameraShiftZ = ViveSR_DualCameraImageCapture.OffsetHeadToCamera[2];

            Vector3 relativeAngle = new Vector3(float.Parse((string)Registry.GetValue(rootPaht, keyNameRelativeAngle + "_x", 0)),
                                                float.Parse((string)Registry.GetValue(rootPaht, keyNameRelativeAngle + "_y", 0)),
                                                float.Parse((string)Registry.GetValue(rootPaht, keyNameRelativeAngle + "_z", 0)));
            Vector3 absoluteAngle = new Vector3(float.Parse((string)Registry.GetValue(rootPaht, keyNameAbsoluteAngle + "_x", 0)),
                                                float.Parse((string)Registry.GetValue(rootPaht, keyNameAbsoluteAngle + "_y", 0)),
                                                float.Parse((string)Registry.GetValue(rootPaht, keyNameAbsoluteAngle + "_z", 0)));

            CurrentCalibrationType = CalibrationType.RELATIVE;
            Calibration(CalibrationAxis.X, relativeAngle.x);
            Calibration(CalibrationAxis.Y, relativeAngle.y);
            Calibration(CalibrationAxis.Z, relativeAngle.z);

            CurrentCalibrationType = CalibrationType.ABSOLUTE;
            Calibration(CalibrationAxis.X, absoluteAngle.x);
            Calibration(CalibrationAxis.Y, absoluteAngle.y);
            Calibration(CalibrationAxis.Z, absoluteAngle.z);
        }
        /// <summary>
        /// Load the custom calibration parameters from  DualCameraParameters.xml.
        /// </summary>
        public void LoadDeviceParameter()
        {
            foreach (DualCameraIndex camIndex in Enum.GetValues(typeof(DualCameraIndex)))
            {
                ViveSR_TrackedCamera trackedCamera = camIndex == DualCameraIndex.LEFT ? ViveSR_DualCameraRig.Instance.TrackedCameraLeft :
                                                     ViveSR_DualCameraRig.Instance.TrackedCameraRight;
                if (trackedCamera != null)
                {
                    int camValue = camIndex == DualCameraIndex.LEFT ? 0 : 1;
                    trackedCamera.Anchor.transform.localPosition = new Vector3(0,
                                                                               -ViveSR_DualCameraImageCapture.OffsetHeadToCamera[camValue * 3 + 1],
                                                                               -ViveSR_DualCameraImageCapture.OffsetHeadToCamera[camValue * 3 + 2]);

                    for (int planeIndex = 0; planeIndex < 2; planeIndex++)
                    {
                        ViveSR_DualCameraImagePlane imagePlane = planeIndex == 0 ? trackedCamera.ImagePlane :
                                                                 trackedCamera.ImagePlaneCalibration;
                        if (imagePlane != null)
                        {
                            imagePlane.DistortedImageWidth    = ViveSR_DualCameraImageCapture.DistortedImageWidth;
                            imagePlane.DistortedImageHeight   = ViveSR_DualCameraImageCapture.DistortedImageHeight;
                            imagePlane.UndistortedImageWidth  = ViveSR_DualCameraImageCapture.UndistortedImageWidth;
                            imagePlane.UndistortedImageHeight = ViveSR_DualCameraImageCapture.UndistortedImageHeight;
                            if (camIndex == DualCameraIndex.LEFT)
                            {
                                imagePlane.DistortedCx     = ViveSR_DualCameraImageCapture.DistortedCx_L;
                                imagePlane.DistortedCy     = ViveSR_DualCameraImageCapture.DistortedCy_L;
                                imagePlane.UndistortedCx   = ViveSR_DualCameraImageCapture.UndistortedCx_L;
                                imagePlane.UndistortedCy   = ViveSR_DualCameraImageCapture.UndistortedCy_L;
                                imagePlane.FocalLength     = ViveSR_DualCameraImageCapture.FocalLength_L;
                                imagePlane.UndistortionMap = ViveSR_DualCameraImageCapture.UndistortionMap_L;
                            }
                            else if (camIndex == DualCameraIndex.RIGHT)
                            {
                                imagePlane.DistortedCx     = ViveSR_DualCameraImageCapture.DistortedCx_R;
                                imagePlane.DistortedCy     = ViveSR_DualCameraImageCapture.DistortedCy_R;
                                imagePlane.UndistortedCx   = ViveSR_DualCameraImageCapture.UndistortedCx_R;
                                imagePlane.UndistortedCy   = ViveSR_DualCameraImageCapture.UndistortedCy_R;
                                imagePlane.FocalLength     = ViveSR_DualCameraImageCapture.FocalLength_R;
                                imagePlane.UndistortionMap = ViveSR_DualCameraImageCapture.UndistortionMap_R;
                            }
                        }
                    }
                }
            }
            // Shift the VR camera along the y and z direction of the camera coordinate system.
            ViveSR_DualCameraRig.Instance.HMDCameraShifter.CameraShift = new Vector3(
                0f, ViveSR_DualCameraImageCapture.OffsetHeadToCamera[1], ViveSR_DualCameraImageCapture.OffsetHeadToCamera[2]);

            //load to temp variable which will update variable in calibiration function
            Vector3 _RelativeAngle = new Vector3(GetRegistryValue(keyNamePath, keyNameRelativeAngle + "_x", 0.0f),
                                                 GetRegistryValue(keyNamePath, keyNameRelativeAngle + "_y", 0.0f),
                                                 GetRegistryValue(keyNamePath, keyNameRelativeAngle + "_z", 0.0f));
            Vector3 _AbsoluteAngle = new Vector3(GetRegistryValue(keyNamePath, keyNameAbsoluteAngle + "_x", 0.0f),
                                                 GetRegistryValue(keyNamePath, keyNameAbsoluteAngle + "_y", 0.0f),
                                                 GetRegistryValue(keyNamePath, keyNameAbsoluteAngle + "_z", 0.0f));

            CurrentCalibrationType = CalibrationType.RELATIVE;
            Calibration(CalibrationAxis.X, _RelativeAngle.x);
            Calibration(CalibrationAxis.Y, _RelativeAngle.y);
            Calibration(CalibrationAxis.Z, _RelativeAngle.z);

            CurrentCalibrationType = CalibrationType.ABSOLUTE;
            Calibration(CalibrationAxis.X, _AbsoluteAngle.x);
            Calibration(CalibrationAxis.Y, _AbsoluteAngle.y);
            Calibration(CalibrationAxis.Z, _AbsoluteAngle.z);
        }