예제 #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
        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);
        }
예제 #3
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);
        }