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();
            }
        }
Пример #2
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();
            }
        }
Пример #3
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);
        }