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; }
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); }
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); }