private void UpdateWordResultPoses(Transform arCameraTransform, IEnumerable <VuforiaManagerImpl.WordResultData> wordResults) { if (this.mVuforiaBehaviour == null) { this.mVuforiaBehaviour = VuforiaARController.Instance; } Rect videoBackgroundRectInViewPort = this.mVuforiaBehaviour.GetVideoBackgroundRectInViewPort(); bool isTextureMirrored = this.mVuforiaBehaviour.VideoBackGroundMirrored == VuforiaRenderer.VideoBackgroundReflection.ON; CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(); foreach (VuforiaManagerImpl.WordResultData current in wordResults) { WordResultImpl arg_A9_0 = (WordResultImpl)this.mTrackedWords[current.id]; Vector3 position = arCameraTransform.TransformPoint(current.pose.position); Quaternion orientation = current.pose.orientation; Quaternion orientation2 = arCameraTransform.rotation * orientation * Quaternion.AngleAxis(270f, Vector3.left); arg_A9_0.SetPose(position, orientation2); arg_A9_0.SetStatus(current.status); OrientedBoundingBox cameraFrameObb = new OrientedBoundingBox(current.orientedBoundingBox.center, current.orientedBoundingBox.halfExtents, current.orientedBoundingBox.rotation); arg_A9_0.SetObb(VuforiaRuntimeUtilities.CameraFrameToScreenSpaceCoordinates(cameraFrameObb, videoBackgroundRectInViewPort, isTextureMirrored, videoMode)); } if (this.mWordPrefabCreationMode == WordPrefabCreationMode.DUPLICATE) { this.UpdateWordBehaviourPoses(); } }
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(); } }
public override CameraDevice.VideoModeData GetVideoMode() { if (this.mVideoModeDataNeedsUpdate) { this.mVideoModeData = this.GetVideoMode(this.mCameraDeviceMode); this.mVideoModeDataNeedsUpdate = false; } return(this.mVideoModeData); }
protected override void Update() { if (this.mVideoBgConfigChanged) { bool flag = false; Texture videoBackgroundTexture = VuforiaRenderer.Instance.VideoBackgroundTexture; if (videoBackgroundTexture != null && videoBackgroundTexture != this.mTexture) { flag = true; } if (!VuforiaRuntimeUtilities.IsPlayMode()) { CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(); if ((this.mTexture == null || this.mTexture.GetNativeTexturePtr() != this.mNativeTexturePtr || this.mTexture.width != videoMode.width || this.mTexture.height != videoMode.height) && videoMode.width > 0 && videoMode.height > 0) { IntPtr intPtr = VuforiaRenderer.Instance.createNativeTexture(videoMode.width, videoMode.height, 16); if (intPtr != IntPtr.Zero) { Texture2D texture2D = Texture2D.CreateExternalTexture(videoMode.width, videoMode.height, TextureFormat.RGBA32, true, true, intPtr); texture2D.filterMode = FilterMode.Bilinear; texture2D.wrapMode = TextureWrapMode.Clamp; this.mNativeTexturePtr = texture2D.GetNativeTexturePtr(); this.mTexture = texture2D; } } } if (!flag) { if (VuforiaRenderer.Instance.GetRendererAPI() == VuforiaRenderer.RendererAPI.METAL) { if (!VuforiaRenderer.Instance.SetVideoBackgroundTexturePtr(this.mTexture, this.mNativeTexturePtr)) { Debug.Log("Failed to setVideoBackgroundTexturePtr " + this.mNativeTexturePtr.ToString()); } } else if (VuforiaRenderer.Instance.GetRendererAPI() == VuforiaRenderer.RendererAPI.DIRECTX3D11) { if (!VuforiaRenderer.Instance.SetVideoBackgroundTexturePtr(this.mTexture, this.mNativeTexturePtr)) { Debug.Log("Failed to setVideoBackgroundTexturePtr " + this.mNativeTexturePtr.ToString()); } } else if (!VuforiaRenderer.Instance.SetVideoBackgroundTexture(this.mTexture, this.mNativeTexturePtr.ToInt32())) { Debug.Log("Failed to setVideoBackgroundTexture " + this.mNativeTexturePtr.ToInt32()); } } else { Debug.LogWarning("VideoTextureRendererBehaviour: not setting Video Background Texture because already set by application code!"); } this.mVideoBgConfigChanged = false; } }
public override CameraDevice.VideoModeData GetVideoMode(CameraDevice.CameraDeviceMode mode) { if (VuforiaRuntimeUtilities.IsPlayMode()) { return(this.WebCam.GetVideoMode()); } IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(CameraDevice.VideoModeData))); VuforiaWrapper.Instance.CameraDeviceGetVideoMode((int)mode, intPtr); CameraDevice.VideoModeData arg_4F_0 = (CameraDevice.VideoModeData)Marshal.PtrToStructure(intPtr, typeof(CameraDevice.VideoModeData)); Marshal.FreeHGlobal(intPtr); return(arg_4F_0); }
public virtual void ConfigureVideoBackground() { Device.Instance.DeleteRenderingPrimitives(); VuforiaRenderer.VideoBGCfgData videoBackgroundConfig = VuforiaRenderer.Instance.GetVideoBackgroundConfig(); CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(this.mCameraDeviceMode); videoBackgroundConfig.enabled = 1; videoBackgroundConfig.position = new VuforiaRenderer.Vec2I(0, 0); videoBackgroundConfig.reflection = VuforiaRenderer.InternalInstance.GetLastSetReflection(); bool flag; if (VuforiaRuntimeUtilities.IsPlayMode()) { flag = true; } else { ScreenOrientation surfaceOrientation = SurfaceUtilities.GetSurfaceOrientation(); flag = (surfaceOrientation == ScreenOrientation.Landscape || surfaceOrientation == ScreenOrientation.LandscapeLeft || surfaceOrientation == ScreenOrientation.LandscapeRight); } if (flag) { float num = (float)videoMode.height * ((float)this.mCameraViewPortWidth / (float)videoMode.width); videoBackgroundConfig.size = new VuforiaRenderer.Vec2I(this.mCameraViewPortWidth, (int)num); if (videoBackgroundConfig.size.y < this.mCameraViewPortHeight) { videoBackgroundConfig.size.x = (int)((float)this.mCameraViewPortHeight * ((float)videoMode.width / (float)videoMode.height)); videoBackgroundConfig.size.y = this.mCameraViewPortHeight; } } else { float num2 = (float)videoMode.height * ((float)this.mCameraViewPortHeight / (float)videoMode.width); videoBackgroundConfig.size = new VuforiaRenderer.Vec2I((int)num2, this.mCameraViewPortHeight); if (videoBackgroundConfig.size.x < this.mCameraViewPortWidth) { videoBackgroundConfig.size.x = this.mCameraViewPortWidth; videoBackgroundConfig.size.y = (int)((float)this.mCameraViewPortWidth * ((float)videoMode.width / (float)videoMode.height)); } } VuforiaRenderer.InternalInstance.SetVideoBackgroundConfigInternal(videoBackgroundConfig); int num3 = videoBackgroundConfig.position.x + (this.mCameraViewPortWidth - videoBackgroundConfig.size.x) / 2; int num4 = videoBackgroundConfig.position.y + (this.mCameraViewPortHeight - videoBackgroundConfig.size.y) / 2; this.mVideoBackgroundViewportRect = new Rect((float)num3, (float)num4, (float)videoBackgroundConfig.size.x, (float)videoBackgroundConfig.size.y); this.mLastVideoBackGroundMirroredFromSDK = VuforiaRenderer.Instance.GetVideoBackgroundConfig().reflection; this.UpdateProjection(); if (this.mOnVideoBackgroundConfigChanged != null) { this.mOnVideoBackgroundConfigChanged(); } }
public override bool GetRegionOfInterest(out Rect detectionRegion, out Rect trackingRegion) { VuforiaARController expr_05 = VuforiaARController.Instance; Rect videoBackgroundRectInViewPort = expr_05.GetVideoBackgroundRectInViewPort(); bool isTextureMirrored = expr_05.VideoBackGroundMirrored == VuforiaRenderer.VideoBackgroundReflection.ON; CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(); IntPtr intPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleIntData))); IntPtr intPtr2 = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(RectangleIntData))); VuforiaWrapper.Instance.TextTrackerGetRegionOfInterest(intPtr, intPtr2); RectangleIntData camSpaceRectData = (RectangleIntData)Marshal.PtrToStructure(intPtr, typeof(RectangleIntData)); RectangleIntData camSpaceRectData2 = (RectangleIntData)Marshal.PtrToStructure(intPtr2, typeof(RectangleIntData)); Marshal.FreeHGlobal(intPtr); Marshal.FreeHGlobal(intPtr2); detectionRegion = this.ScreenSpaceRectFromCamSpaceRectData(camSpaceRectData, videoBackgroundRectInViewPort, isTextureMirrored, videoMode); trackingRegion = this.ScreenSpaceRectFromCamSpaceRectData(camSpaceRectData2, videoBackgroundRectInViewPort, isTextureMirrored, videoMode); return(true); }
public override bool SetRegionOfInterest(Rect detectionRegion, Rect trackingRegion) { VuforiaARController expr_05 = VuforiaARController.Instance; Rect videoBackgroundRectInViewPort = expr_05.GetVideoBackgroundRectInViewPort(); bool flag = expr_05.VideoBackGroundMirrored == VuforiaRenderer.VideoBackgroundReflection.ON; CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(); Vector2 screenSpaceCoordinate; Vector2 screenSpaceCoordinate2; VuforiaRuntimeUtilities.SelectRectTopLeftAndBottomRightForLandscapeLeft(detectionRegion, flag, out screenSpaceCoordinate, out screenSpaceCoordinate2); Vector2 screenSpaceCoordinate3; Vector2 screenSpaceCoordinate4; VuforiaRuntimeUtilities.SelectRectTopLeftAndBottomRightForLandscapeLeft(trackingRegion, flag, out screenSpaceCoordinate3, out screenSpaceCoordinate4); VuforiaRenderer.Vec2I vec2I = VuforiaRuntimeUtilities.ScreenSpaceToCameraFrameCoordinates(screenSpaceCoordinate, videoBackgroundRectInViewPort, flag, videoMode); VuforiaRenderer.Vec2I vec2I2 = VuforiaRuntimeUtilities.ScreenSpaceToCameraFrameCoordinates(screenSpaceCoordinate2, videoBackgroundRectInViewPort, flag, videoMode); VuforiaRenderer.Vec2I vec2I3 = VuforiaRuntimeUtilities.ScreenSpaceToCameraFrameCoordinates(screenSpaceCoordinate3, videoBackgroundRectInViewPort, flag, videoMode); VuforiaRenderer.Vec2I vec2I4 = VuforiaRuntimeUtilities.ScreenSpaceToCameraFrameCoordinates(screenSpaceCoordinate4, videoBackgroundRectInViewPort, flag, videoMode); if (VuforiaWrapper.Instance.TextTrackerSetRegionOfInterest(vec2I.x, vec2I.y, vec2I2.x, vec2I2.y, vec2I3.x, vec2I3.y, vec2I4.x, vec2I4.y, (int)this.CurrentUpDirection) == 0) { Debug.LogError(string.Format("Could not set region of interest: ({0}, {1}, {2}, {3}) - ({4}, {5}, {6}, {7})", new object[] { detectionRegion.x, detectionRegion.y, detectionRegion.width, detectionRegion.height, trackingRegion.x, trackingRegion.y, trackingRegion.width, trackingRegion.height })); return(false); } return(true); }
public void Update() { if (VuforiaRuntimeUtilities.IsPlayMode()) { this.mWebCamTexture.CheckPermissions(); if (!this.IsTextureSizeAvailable && this.mWebCamTexture.DidUpdateThisFrame) { this.IsTextureSizeAvailable = true; if (this.mWebCamProfile.ResampledTextureSize.y == 0) { this.ComputeResampledTextureSize(); VuforiaWrapper.Instance.CameraDeviceStopCamera(); VuforiaWrapper.Instance.CameraDeviceDeinitCamera(); VuforiaWrapper.Instance.CameraDeviceSetCameraConfiguration(this.mWebCamProfile.ResampledTextureSize.x, this.mWebCamProfile.ResampledTextureSize.y); VuforiaWrapper.Instance.CameraDeviceInitCamera(1); VuforiaWrapper.Instance.CameraDeviceSelectVideoMode(-1); VuforiaWrapper.Instance.CameraDeviceStartCamera(); } VuforiaRenderer.Vec2I resampledTextureSize = this.mWebCamProfile.ResampledTextureSize; this.mVideoModeData = new CameraDevice.VideoModeData { width = resampledTextureSize.x, height = resampledTextureSize.y, frameRate = (float)this.mWebCamProfile.RequestedFPS }; this.mVideoTextureInfo = new VuforiaRenderer.VideoTextureInfo { imageSize = resampledTextureSize, textureSize = resampledTextureSize }; this.mTextureRenderer = new TextureRenderer(this.mWebCamTexture.Texture, this.mRenderTextureLayer, resampledTextureSize); this.mBufferReadTexture = new Texture2D(resampledTextureSize.x, resampledTextureSize.y); this.mReadPixelsRect = new Rect(0f, 0f, (float)resampledTextureSize.x, (float)resampledTextureSize.y); } } }
public void ConfigureVideoBackground() { Device.Instance.DeleteRenderingPrimitives(); VuforiaRenderer.VideoBGCfgData videoBackgroundConfig = VuforiaRenderer.Instance.GetVideoBackgroundConfig(); CameraDevice.VideoModeData videoMode = CameraDevice.Instance.GetVideoMode(this.mCameraDeviceMode); videoBackgroundConfig.enabled = 1; videoBackgroundConfig.position = new VuforiaRenderer.Vec2I(0, 0); float num = (float)this.mScreenHeight; float num2 = (float)this.mScreenWidth; if (!this.mEyewearDevice.IsSeeThru()) { ScreenOrientation surfaceOrientation = SurfaceUtilities.GetSurfaceOrientation(); if (surfaceOrientation == ScreenOrientation.Landscape || surfaceOrientation == ScreenOrientation.LandscapeLeft || surfaceOrientation == ScreenOrientation.LandscapeRight) { num2 = num * (float)videoMode.width / (float)videoMode.height; } else { num2 = num * (float)videoMode.height / (float)videoMode.width; } } videoBackgroundConfig.size = new VuforiaRenderer.Vec2I((int)num2, (int)num); videoBackgroundConfig.reflection = VuforiaRenderer.VideoBackgroundReflection.OFF; VuforiaRenderer.InternalInstance.SetVideoBackgroundConfigInternal(videoBackgroundConfig); int num3 = videoBackgroundConfig.position.x + (this.mScreenWidth - videoBackgroundConfig.size.x) / 2; int num4 = videoBackgroundConfig.position.y + (this.mScreenHeight - videoBackgroundConfig.size.y) / 2; this.mVideoBackgroundViewportRect = new Rect((float)num3, (float)num4, (float)videoBackgroundConfig.size.x, (float)videoBackgroundConfig.size.y); this.mLastVideoBackGroundMirroredFromSDK = VuforiaRenderer.Instance.GetVideoBackgroundConfig().reflection; this.UpdateProjection(); if (this.mOnVideoBackgroundConfigChanged != null) { this.mOnVideoBackgroundConfigChanged(); } }
private Rect ScreenSpaceRectFromCamSpaceRectData(RectangleIntData camSpaceRectData, Rect bgTextureViewPortRect, bool isTextureMirrored, CameraDevice.VideoModeData videoModeData) { Vector2 arg_3B_0 = VuforiaRuntimeUtilities.CameraFrameToScreenSpaceCoordinates(new Vector2((float)camSpaceRectData.leftTopX, (float)camSpaceRectData.leftTopY), bgTextureViewPortRect, isTextureMirrored, videoModeData); Vector2 bottomRight = VuforiaRuntimeUtilities.CameraFrameToScreenSpaceCoordinates(new Vector2((float)camSpaceRectData.rightBottomX, (float)camSpaceRectData.rightBottomY), bgTextureViewPortRect, isTextureMirrored, videoModeData); return(VuforiaRuntimeUtilities.CalculateRectFromLandscapeLeftCorners(arg_3B_0, bottomRight, isTextureMirrored)); }
public static OrientedBoundingBox CameraFrameToScreenSpaceCoordinates(OrientedBoundingBox cameraFrameObb, Rect bgTextureViewPortRect, bool isTextureMirrored, CameraDevice.VideoModeData videoModeData) { bool flag = false; float num = 0f; switch (VuforiaRuntimeUtilities.ScreenOrientation) { case ScreenOrientation.Portrait: num += 90f; flag = true; break; case ScreenOrientation.PortraitUpsideDown: num += 270f; flag = true; break; case ScreenOrientation.LandscapeRight: num += 180f; break; } float num2 = bgTextureViewPortRect.width / (float)(flag ? videoModeData.height : videoModeData.width); float num3 = bgTextureViewPortRect.height / (float)(flag ? videoModeData.width : videoModeData.height); Vector2 arg_D9_0 = VuforiaRuntimeUtilities.CameraFrameToScreenSpaceCoordinates(cameraFrameObb.Center, bgTextureViewPortRect, isTextureMirrored, videoModeData); Vector2 halfExtents = new Vector2(cameraFrameObb.HalfExtents.x * num2, cameraFrameObb.HalfExtents.y * num3); float num4 = cameraFrameObb.Rotation; if (isTextureMirrored) { num4 = -num4; } num4 = num4 * 180f / 3.14159274f + num; return(new OrientedBoundingBox(arg_D9_0, halfExtents, num4)); }
public static Vector2 CameraFrameToScreenSpaceCoordinates(Vector2 cameraFrameCoordinate, Rect bgTextureViewPortRect, bool isTextureMirrored, CameraDevice.VideoModeData videoModeData) { float xMin = bgTextureViewPortRect.xMin; float yMin = bgTextureViewPortRect.yMin; float width = bgTextureViewPortRect.width; float height = bgTextureViewPortRect.height; bool flag = false; float num = (float)videoModeData.width; float num2 = (float)videoModeData.height; float num3 = 0f; float num4 = 0f; float num5 = 0f; float num6 = 0f; VuforiaRuntimeUtilities.PrepareCoordinateConversion(isTextureMirrored, ref num3, ref num4, ref num5, ref num6, ref flag); float num7 = (cameraFrameCoordinate.x / num - num3) / num5; float num8 = (cameraFrameCoordinate.y / num2 - num4) / num6; Vector2 result; if (flag) { result = new Vector2(width * num8 + xMin, height * num7 + yMin); } else { result = new Vector2(width * num7 + xMin, height * num8 + yMin); } return(result); }
public static VuforiaRenderer.Vec2I ScreenSpaceToCameraFrameCoordinates(Vector2 screenSpaceCoordinate, Rect bgTextureViewPortRect, bool isTextureMirrored, CameraDevice.VideoModeData videoModeData) { float xMin = bgTextureViewPortRect.xMin; float yMin = bgTextureViewPortRect.yMin; float width = bgTextureViewPortRect.width; float height = bgTextureViewPortRect.height; bool flag = false; float num = (float)videoModeData.width; float num2 = (float)videoModeData.height; float num3 = 0f; float num4 = 0f; float num5 = 0f; float num6 = 0f; VuforiaRuntimeUtilities.PrepareCoordinateConversion(isTextureMirrored, ref num3, ref num4, ref num5, ref num6, ref flag); float num7 = (screenSpaceCoordinate.x - xMin) / width; float num8 = (screenSpaceCoordinate.y - yMin) / height; VuforiaRenderer.Vec2I result; if (flag) { result = new VuforiaRenderer.Vec2I(Mathf.RoundToInt((num3 + num5 * num8) * num), Mathf.RoundToInt((num4 + num6 * num7) * num2)); } else { result = new VuforiaRenderer.Vec2I(Mathf.RoundToInt((num3 + num5 * num7) * num), Mathf.RoundToInt((num4 + num6 * num8) * num2)); } return(result); }