コード例 #1
0
        private void UpdateProjection()
        {
            if (!VuforiaRuntimeUtilities.IsVuforiaEnabled())
            {
                return;
            }
            this.mLastAppliedNearClipPlane = this.mPrimaryCamera.nearClipPlane;
            this.mLastAppliedFarClipPlane  = this.mPrimaryCamera.farClipPlane;
            this.mLastAppliedFoV           = this.mPrimaryCamera.fieldOfView;
            Device instance = Device.Instance;

            this.mPrimaryCamera.projectionMatrix = instance.GetProjectionMatrix(View.VIEW_SINGULAR, this.mLastAppliedNearClipPlane, this.mLastAppliedFarClipPlane, this.mProjectionOrientation);
            if (Device.Instance.GetMode() == Device.Mode.MODE_VR)
            {
                float targetHorizontalFoVDeg = CameraConfigurationUtility.CalculateHorizontalFoVFromViewPortAspect(this.mLastAppliedFoV, (float)this.mCameraViewPortWidth / (float)this.mCameraViewPortHeight);
                this.mPrimaryCamera.projectionMatrix = CameraConfigurationUtility.ScalePerspectiveProjectionMatrix(this.mPrimaryCamera.projectionMatrix, this.mLastAppliedFoV, targetHorizontalFoVDeg);
            }
            else
            {
                CameraConfigurationUtility.SetFovForCustomProjection(this.mPrimaryCamera);
                this.mLastAppliedFoV = this.mPrimaryCamera.fieldOfView;
            }
            this.mPrimaryCamera.transform.localPosition = new Vector3(0f, 0f, 0f);
            this.mPrimaryCamera.transform.localRotation = Quaternion.identity;
        }
コード例 #2
0
        public static float ExtractHorizontalCameraFoV(Matrix4x4 inverseProjMatrix)
        {
            Vector3 arg_22_0 = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MAX_LEFT);
            Vector3 vector   = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MAX_RIGHT);

            return(Vector3.Angle(arg_22_0, vector));
        }
        protected void ComputeViewPortRect(int leftCameraViewPortHeight, int leftCameraViewPortWidth)
        {
            float num  = CameraConfigurationUtility.ExtractVerticalCameraFoV(this.mPrimaryCamera.projectionMatrix.inverse) * 0.0174532924f;
            float num2 = (float)(Math.Tan((double)(CameraDevice.Instance.GetCameraFieldOfViewRads().y / 2f)) / Math.Tan((double)(num / 2f)));
            float num3 = (float)leftCameraViewPortHeight * num2;

            CameraDevice.VideoModeData videoMode          = CameraDevice.Instance.GetVideoMode(this.mCameraDeviceMode);
            ScreenOrientation          surfaceOrientation = SurfaceUtilities.GetSurfaceOrientation();
            float num4;

            if (surfaceOrientation == ScreenOrientation.Landscape || surfaceOrientation == ScreenOrientation.LandscapeLeft || surfaceOrientation == ScreenOrientation.LandscapeRight)
            {
                num4 = num3 * (float)videoMode.width / (float)videoMode.height;
            }
            else
            {
                num4 = num3 * (float)videoMode.height / (float)videoMode.width;
            }
            int num5 = (leftCameraViewPortWidth - (int)num4) / 2;
            int num6 = (leftCameraViewPortHeight - (int)num3) / 2;

            this.mVideoBackgroundViewportRect = new Rect((float)num5, (float)num6, (float)((int)num4), (float)((int)num3));
            if (base.IsVideoBackgroundEnabled())
            {
                this.mVideoBackgroundBehaviours[this.mPrimaryCamera].ApplyStereoDepthToMatrices();
                this.mVideoBackgroundBehaviours[this.mSecondaryCamera].ApplyStereoDepthToMatrices();
            }
        }
コード例 #4
0
        public static float ExtractVerticalCameraFoV(Matrix4x4 inverseProjMatrix)
        {
            Vector3 arg_22_0 = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MAX_BOTTOM);
            Vector3 vector   = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MAX_TOP);

            return(Vector3.Angle(arg_22_0, vector));
        }
コード例 #5
0
        public void ApplyCorrectedProjectionMatrix(Matrix4x4 projectionMatrix, bool primaryCamera)
        {
            Matrix4x4 inverse = projectionMatrix.inverse;

            if (primaryCamera)
            {
                this.mExternallySetLeftMatrix = projectionMatrix;
                CameraConfigurationUtility.ExtractCameraClippingPlanes(inverse, out this.mNewLeftNearClipPlane, out this.mNewLeftFarClipPlane);
                this.mNewLeftVerticalVirtualFoV   = CameraConfigurationUtility.ExtractVerticalCameraFoV(inverse);
                this.mNewLeftHorizontalVirtualFoV = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inverse);
            }
            else
            {
                this.mExternallySetRightMatrix = projectionMatrix;
                CameraConfigurationUtility.ExtractCameraClippingPlanes(inverse, out this.mNewRightNearClipPlane, out this.mNewRightFarClipPlane);
                this.mNewRightVerticalVirtualFoV   = CameraConfigurationUtility.ExtractVerticalCameraFoV(inverse);
                this.mNewRightHorizontalVirtualFoV = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inverse);
            }
            if (this.CameraParameterChanged())
            {
                ScreenOrientation screenOrientation;
                this.CheckForSurfaceChanges(out screenOrientation);
            }
            this.mPrimaryCamera.projectionMatrix   = this.mLastAppliedLeftProjection;
            this.mSecondaryCamera.projectionMatrix = this.mLastAppliedRightProjection;
            if (base.IsVideoBackgroundEnabled())
            {
                this.mVideoBackgroundBehaviours[this.mPrimaryCamera].ApplyStereoDepthToMatrices();
                this.mVideoBackgroundBehaviours[this.mSecondaryCamera].ApplyStereoDepthToMatrices();
            }
        }
コード例 #6
0
        public static void ExtractCameraClippingPlanes(Matrix4x4 inverseProjMatrix, out float near, out float far)
        {
            Vector3 vector  = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MIN_CENTER);
            Vector3 vector2 = CameraConfigurationUtility.HomogenizedVec3(inverseProjMatrix * CameraConfigurationUtility.MAX_CENTER);

            near = vector.z * -1f;
            far  = vector2.z * -1f;
        }
コード例 #7
0
        protected override void UpdateProjection()
        {
            if (!VuforiaRuntimeUtilities.IsVuforiaEnabled())
            {
                return;
            }
            Device instance = Device.Instance;

            this.mLastAppliedLeftNearClipPlane  = this.mPrimaryCamera.nearClipPlane;
            this.mLastAppliedLeftFarClipPlane   = this.mPrimaryCamera.farClipPlane;
            this.mLastAppliedRightNearClipPlane = this.mSecondaryCamera.nearClipPlane;
            this.mLastAppliedRightFarClipPlane  = this.mSecondaryCamera.farClipPlane;
            Matrix4x4 projectionMatrix  = instance.GetProjectionMatrix(View.VIEW_LEFTEYE, this.mLastAppliedLeftNearClipPlane, this.mLastAppliedLeftFarClipPlane, this.mProjectionOrientation);
            Matrix4x4 projectionMatrix2 = instance.GetProjectionMatrix(View.VIEW_RIGHTEYE, this.mLastAppliedRightNearClipPlane, this.mLastAppliedRightFarClipPlane, this.mProjectionOrientation);

            this.mPrimaryCamera.transform.localPosition   = new Vector3(-0.5f * this.mCameraOffset, 0f, 0f);
            this.mSecondaryCamera.transform.localPosition = new Vector3(0.5f * this.mCameraOffset, 0f, 0f);
            int width;
            int height;

            if (this.mIsDistorted)
            {
                instance.GetTextureSize(View.VIEW_POSTPROCESS, out width, out height);
            }
            else
            {
                width  = Screen.width;
                height = Screen.height;
            }
            this.mPrimaryCamera.rect   = instance.GetNormalizedViewport(View.VIEW_LEFTEYE);
            this.mSecondaryCamera.rect = instance.GetNormalizedViewport(View.VIEW_RIGHTEYE);
            int     num                   = (int)((float)width * this.mPrimaryCamera.rect.width);
            int     num2                  = (int)((float)height * this.mPrimaryCamera.rect.height);
            int     num3                  = (int)((float)width * this.mSecondaryCamera.rect.width);
            int     num4                  = (int)((float)height * this.mSecondaryCamera.rect.height);
            Vector4 effectiveFovRads      = Device.Instance.GetEffectiveFovRads(View.VIEW_LEFTEYE);
            Vector4 effectiveFovRads2     = Device.Instance.GetEffectiveFovRads(View.VIEW_RIGHTEYE);
            float   num5                  = (effectiveFovRads.x + effectiveFovRads.y) * 57.29578f;
            float   targetVerticalFoVDeg  = CameraConfigurationUtility.CalculateVerticalFoVFromViewPortAspect(num5, (float)num / (float)num2);
            float   num6                  = (effectiveFovRads2.x + effectiveFovRads2.y) * 57.29578f;
            float   targetVerticalFoVDeg2 = CameraConfigurationUtility.CalculateVerticalFoVFromViewPortAspect(num6, (float)num3 / (float)num4);

            this.mPrimaryCamera.projectionMatrix   = CameraConfigurationUtility.ScalePerspectiveProjectionMatrix(projectionMatrix, targetVerticalFoVDeg, num5);
            this.mSecondaryCamera.projectionMatrix = CameraConfigurationUtility.ScalePerspectiveProjectionMatrix(projectionMatrix2, targetVerticalFoVDeg2, num6);
            Vector2 skewingValues           = new Vector2(this.mPrimaryCamera.projectionMatrix[0, 2], this.mPrimaryCamera.projectionMatrix[1, 2]);
            Vector2 viewportCentreToEyeAxis = instance.GetViewportCentreToEyeAxis(View.VIEW_LEFTEYE);

            this.mVideoBackgroundBehaviours[this.mPrimaryCamera].SetVuforiaFrustumSkewValues(skewingValues, viewportCentreToEyeAxis);
            Vector2 skewingValues2           = new Vector2(this.mSecondaryCamera.projectionMatrix[0, 2], this.mSecondaryCamera.projectionMatrix[1, 2]);
            Vector2 viewportCentreToEyeAxis2 = instance.GetViewportCentreToEyeAxis(View.VIEW_RIGHTEYE);

            this.mVideoBackgroundBehaviours[this.mSecondaryCamera].SetVuforiaFrustumSkewValues(skewingValues2, viewportCentreToEyeAxis2);
            CameraConfigurationUtility.SetFovForCustomProjection(this.mPrimaryCamera);
            CameraConfigurationUtility.SetFovForCustomProjection(this.mSecondaryCamera);
            base.ComputeViewPortRect(num2, num);
        }
コード例 #8
0
 public ExternalStereoCameraConfiguration(Camera leftCamera, Camera rightCamera) : base(leftCamera, rightCamera)
 {
     this.mNewLeftNearClipPlane         = leftCamera.nearClipPlane;
     this.mNewLeftFarClipPlane          = leftCamera.farClipPlane;
     this.mNewLeftVerticalVirtualFoV    = leftCamera.fieldOfView;
     this.mNewLeftHorizontalVirtualFoV  = CameraConfigurationUtility.CalculateHorizontalFoVFromViewPortAspect(leftCamera.fieldOfView, leftCamera.aspect);
     this.mNewRightNearClipPlane        = rightCamera.nearClipPlane;
     this.mNewRightFarClipPlane         = rightCamera.farClipPlane;
     this.mNewRightVerticalVirtualFoV   = rightCamera.fieldOfView;
     this.mNewRightHorizontalVirtualFoV = CameraConfigurationUtility.CalculateHorizontalFoVFromViewPortAspect(rightCamera.fieldOfView, rightCamera.aspect);
 }
コード例 #9
0
        public static Matrix4x4 ScalePerspectiveProjectionMatrix(Matrix4x4 inputMatrix, float targetVerticalFoVDeg, float targetHorizontalFoVDeg)
        {
            Matrix4x4 result   = inputMatrix;
            float     num      = targetVerticalFoVDeg * 0.0174532924f;
            float     num2     = targetHorizontalFoVDeg * 0.0174532924f;
            double    arg_3C_0 = (double)(CameraConfigurationUtility.ExtractVerticalCameraFoV(inputMatrix.inverse) * 0.0174532924f);
            float     num3     = CameraConfigurationUtility.ExtractHorizontalCameraFoV(inputMatrix.inverse) * 0.0174532924f;
            float     num4     = (float)(Math.Tan(arg_3C_0 / (double)2f) / Math.Tan((double)(num / 2f)));
            float     num5     = (float)(Math.Tan((double)(num3 / 2f)) / Math.Tan((double)(num2 / 2f)));

            result[0] = result[0] * num5;
            result[8] = result[8] * num5;
            result[5] = result[5] * num4;
            result[9] = result[9] * num4;
            return(result);
        }
コード例 #10
0
 private void ApplyMatrix(Camera cam, Matrix4x4 inputMatrix)
 {
     if (this.mVideoBackgroundViewportRect.width != (float)this.mScreenWidth)
     {
         float num = this.mVideoBackgroundViewportRect.width / (float)this.mScreenWidth * 2f;
         inputMatrix[0] = inputMatrix[0] * num;
         inputMatrix[8] = inputMatrix[8] * num;
     }
     if (this.mVideoBackgroundViewportRect.height != (float)this.mScreenHeight)
     {
         float num2 = this.mVideoBackgroundViewportRect.height / (float)this.mScreenHeight;
         inputMatrix[5] = inputMatrix[5] * num2;
         inputMatrix[9] = inputMatrix[9] * num2;
     }
     cam.projectionMatrix = inputMatrix;
     CameraConfigurationUtility.SetFovForCustomProjection(cam);
 }
コード例 #11
0
        protected override void UpdateProjection()
        {
            if (!VuforiaRuntimeUtilities.IsVuforiaEnabled())
            {
                return;
            }
            Device instance = Device.Instance;

            this.mLastAppliedLeftNearClipPlane         = this.mNewLeftNearClipPlane;
            this.mLastAppliedLeftFarClipPlane          = this.mNewLeftFarClipPlane;
            this.mLastAppliedLeftVerticalVirtualFoV    = this.mNewLeftVerticalVirtualFoV;
            this.mLastAppliedLeftHorizontalVirtualFoV  = this.mNewLeftHorizontalVirtualFoV;
            this.mLastAppliedRightNearClipPlane        = this.mNewRightNearClipPlane;
            this.mLastAppliedRightFarClipPlane         = this.mNewRightFarClipPlane;
            this.mLastAppliedRightVerticalVirtualFoV   = this.mNewRightVerticalVirtualFoV;
            this.mLastAppliedRightHorizontalVirtualFoV = this.mNewRightHorizontalVirtualFoV;
            if (Device.Instance.GetMode() == Device.Mode.MODE_AR)
            {
                Matrix4x4 projectionMatrix  = instance.GetProjectionMatrix(View.VIEW_LEFTEYE, this.mLastAppliedLeftNearClipPlane, this.mLastAppliedLeftFarClipPlane, this.mProjectionOrientation);
                Matrix4x4 projectionMatrix2 = instance.GetProjectionMatrix(View.VIEW_RIGHTEYE, this.mLastAppliedRightNearClipPlane, this.mLastAppliedRightFarClipPlane, this.mProjectionOrientation);
                this.mPrimaryCamera.projectionMatrix   = CameraConfigurationUtility.ScalePerspectiveProjectionMatrix(projectionMatrix, this.mLastAppliedLeftVerticalVirtualFoV, this.mLastAppliedLeftHorizontalVirtualFoV);
                this.mSecondaryCamera.projectionMatrix = CameraConfigurationUtility.ScalePerspectiveProjectionMatrix(projectionMatrix2, this.mLastAppliedLeftVerticalVirtualFoV, this.mLastAppliedLeftHorizontalVirtualFoV);
                Vector2 skewingValues = new Vector2(this.mPrimaryCamera.projectionMatrix[0, 2], this.mPrimaryCamera.projectionMatrix[1, 2]);
                this.mVideoBackgroundBehaviours[this.mPrimaryCamera].SetVuforiaFrustumSkewValues(skewingValues, Vector2.zero);
                Vector2 skewingValues2 = new Vector2(this.mSecondaryCamera.projectionMatrix[0, 2], this.mSecondaryCamera.projectionMatrix[1, 2]);
                this.mVideoBackgroundBehaviours[this.mSecondaryCamera].SetVuforiaFrustumSkewValues(skewingValues2, Vector2.zero);
            }
            else
            {
                this.mPrimaryCamera.projectionMatrix   = this.mExternallySetLeftMatrix;
                this.mSecondaryCamera.projectionMatrix = this.mExternallySetRightMatrix;
                this.mVideoBackgroundBehaviours[this.mPrimaryCamera].SetVuforiaFrustumSkewValues(Vector2.zero, Vector2.zero);
                this.mVideoBackgroundBehaviours[this.mSecondaryCamera].SetVuforiaFrustumSkewValues(Vector2.zero, Vector2.zero);
            }
            CameraConfigurationUtility.SetFovForCustomProjection(this.mPrimaryCamera);
            CameraConfigurationUtility.SetFovForCustomProjection(this.mSecondaryCamera);
            this.mLastAppliedLeftProjection  = this.mPrimaryCamera.projectionMatrix;
            this.mLastAppliedRightProjection = this.mSecondaryCamera.projectionMatrix;
            int pixelWidthInt  = this.mPrimaryCamera.GetPixelWidthInt();
            int pixelHeightInt = this.mPrimaryCamera.GetPixelHeightInt();

            base.ComputeViewPortRect(pixelHeightInt, pixelWidthInt);
        }