Esempio n. 1
0
        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);
 }
Esempio n. 4
0
 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);
        }
Esempio n. 6
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();
            }
        }
Esempio n. 7
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
 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);
         }
     }
 }
Esempio n. 10
0
        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();
            }
        }
Esempio n. 11
0
        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));
        }
Esempio n. 12
0
        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));
        }
Esempio n. 13
0
        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);
        }
Esempio n. 14
0
        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);
        }