Exemplo n.º 1
0
    void OnBackgroundTextureChanged()
    {
        VuforiaRenderer.VideoTextureInfo videoTextureInfo = VuforiaRenderer.Instance.GetVideoTextureInfo();

        Debug.Log("OnBackgroundTextureChanged() called with:" +
                  "\nImage Size: " + videoTextureInfo.imageSize.x + "x" + videoTextureInfo.imageSize.y +
                  "\nTexture Size: " + videoTextureInfo.textureSize.x + "x" + videoTextureInfo.textureSize.y);

        // If the video background texture is changed, reassign to the occlusion material texture
        m_OcclusionMaterial.mainTexture = VuforiaRenderer.Instance.VideoBackgroundTexture;
    }
    private void UpdateVideoTexture()
    {
        if (mVideoBackgroundTexture != VuforiaRenderer.Instance.VideoBackgroundTexture)
        {
            mVideoBackgroundTexture = VuforiaRenderer.Instance.VideoBackgroundTexture;
            GetComponent <Renderer>().material.mainTexture = mVideoBackgroundTexture;
        }

        VuforiaRenderer.VideoTextureInfo textureInfo = VuforiaRenderer.Instance.GetVideoTextureInfo();
        float ratioX = (float)textureInfo.imageSize.x / (float)textureInfo.textureSize.x;
        float ratioY = (float)textureInfo.imageSize.y / (float)textureInfo.textureSize.y;

        SetTextureRatio(ratioX, ratioY);
    }
Exemplo n.º 3
0
    void Update()
    {
        if (!m_VideoBackgroundReady)
        {
            m_VideoBGCfgData   = VuforiaRenderer.Instance.GetVideoBackgroundConfig();
            m_VideoTextureInfo = VuforiaRenderer.Instance.GetVideoTextureInfo();

            if (m_EnableLogging)
            {
                Debug.Log(
                    "\nBkgdInfoAvail: " + VuforiaRenderer.Instance.IsVideoBackgroundInfoAvailable() +
                    "\nBkgdInfoSize: " + m_VideoBGCfgData.size.x + "x" + m_VideoBGCfgData.size.y +
                    "\nImageSize: " + m_VideoTextureInfo.imageSize.x + "x" + m_VideoTextureInfo.imageSize.y +
                    "\nTextureSize: " + m_VideoTextureInfo.textureSize.x + "x" + m_VideoTextureInfo.textureSize.y);
            }
        }

        if (!m_ShaderHasBeenSetup)
        {
            // Before setting up the shader, code will verify that background info is available
            // and that sizes in VideoBGCfgData and VideoTextureInfo are not zero.
            // The asynchonous init order may differ between PlayMode and Device.
            if (VuforiaRenderer.Instance.IsVideoBackgroundInfoAvailable() &&
                m_VideoBGCfgData.size.x > 0 &&
                m_VideoTextureInfo.imageSize.x > 0 &&
                m_VideoTextureInfo.textureSize.x > 0)
            {
                m_VideoBackgroundReady = true;

                m_OcclusionMaterial.mainTexture = VuforiaRenderer.Instance.VideoBackgroundTexture;

                SetViewportParameters();

                m_ShaderHasBeenSetup = true;
            }
        }
    }
Exemplo n.º 4
0
    IEnumerator Wait()
    {
        MarkerIsIN = false;
        yield return(new WaitForEndOfFrame());

        if (VuforiaRenderer.Instance.IsVideoBackgroundInfoAvailable())
        {
            VuforiaRenderer.VideoTextureInfo videoTextureInfo = VuforiaRenderer.Instance.GetVideoTextureInfo();

            if (videoTextureInfo.imageSize.x == 0 || videoTextureInfo.imageSize.y == 0)
            {
                goto End;
            }

            float k_x = (float)videoTextureInfo.imageSize.x / (float)videoTextureInfo.textureSize.x * 0.5f;
            float k_y = (float)videoTextureInfo.imageSize.y / (float)videoTextureInfo.textureSize.y * 0.5f;


            GetComponent <Renderer> ().material.SetFloat("_KX", k_x);
            GetComponent <Renderer> ().material.SetFloat("_KY", k_y);

            VideoBackgroundTexure = VuforiaRenderer.Instance.VideoBackgroundTexture;

            if (!VideoBackgroundTexure || !BackgroundPlane.GetComponent <MeshFilter>())
            {
                goto End;
            }

            GetComponent <Renderer>().material.SetTexture("_MainTex", VideoBackgroundTexure);


            float ImageAspect = (float)videoTextureInfo.imageSize.x / (float)videoTextureInfo.imageSize.y;


            if (Child_AR_Camera.aspect >= 1.0f || Application.isEditor)
            {
                if (Child_AR_Camera.aspect >= ImageAspect)
                {
                    float Aspect = Child_AR_Camera.aspect / ImageAspect;
                    AR_Camera_Vector.transform.localScale = new Vector3(1.0f, Aspect, 1.0f);

                #if !UNITY_EDITOR
                    if (Screen.orientation == ScreenOrientation.LandscapeRight)
                    {
                        AR_Camera_Vector.transform.localScale = new Vector3(1.0f, Aspect, -1.0f);
                    }
                #endif
                }

                else
                {
                    float Aspect = ImageAspect / Child_AR_Camera.aspect;
                    AR_Camera_Vector.transform.localScale = new Vector3(Aspect, 1.0f, 1.0f);

                                #if !UNITY_EDITOR
                    if (Screen.orientation == ScreenOrientation.LandscapeRight)
                    {
                        AR_Camera_Vector.transform.localScale = new Vector3(Aspect, 1.0f, -1.0f);
                    }
                                #endif
                }
            }


            if (Child_AR_Camera.aspect < 1.0f & !Application.isEditor)
            {
                if (ImageAspect >= (1.0f / Child_AR_Camera.aspect))
                {
                    AR_Camera_Vector.transform.localScale = new Vector3(ImageAspect, Child_AR_Camera.aspect, 1.0f);

                                        #if !UNITY_EDITOR
                    if (Screen.orientation == ScreenOrientation.PortraitUpsideDown)
                    {
                        AR_Camera_Vector.transform.localScale = new Vector3(ImageAspect, Child_AR_Camera.aspect, -1.0f);
                    }
                                        #endif
                }

                else
                {
                    AR_Camera_Vector.transform.localScale = new Vector3(1.0f / Child_AR_Camera.aspect, 1.0f / ImageAspect, 1.0f);

                                        #if !UNITY_EDITOR
                    if (Screen.orientation == ScreenOrientation.PortraitUpsideDown)
                    {
                        AR_Camera_Vector.transform.localScale = new Vector3(1.0f / Child_AR_Camera.aspect, 1.0f / ImageAspect, -1.0f);
                    }
                                        #endif
                }

                AR_Camera_Vector.transform.localEulerAngles = new Vector3(0.0f, 180.0f, 270.0f);
            }


End:
            if (videoTextureInfo.imageSize.x == 0 || videoTextureInfo.imageSize.y == 0 || !VideoBackgroundTexure || !BackgroundPlane.GetComponent <MeshFilter>())
            {
                StartCoroutine(Wait());
            }
        }
        else
        {
            yield return(new WaitForEndOfFrame());

            StartCoroutine(Wait());
        }
    }
Exemplo n.º 5
0
    void SetViewportParameters()
    {
        VuforiaRenderer.VideoTextureInfo textureInfo = VuforiaRenderer.Instance.GetVideoTextureInfo();
        m_TexureRatio.x = (float)textureInfo.imageSize.x / (float)textureInfo.textureSize.x;
        m_TexureRatio.y = (float)textureInfo.imageSize.y / (float)textureInfo.textureSize.y;

        // update viewport size
        Rect viewport = VuforiaARController.Instance.GetVideoBackgroundRectInViewPort();

        m_ViewportOrig.x = viewport.xMin;
        m_ViewportOrig.y = viewport.yMin;
        m_ViewportSize.x = viewport.xMax - viewport.xMin;
        m_ViewportSize.y = viewport.yMax - viewport.yMin;

        bool isMirrored = VuforiaARController.Instance.VideoBackGroundMirrored == VuforiaRenderer.VideoBackgroundReflection.ON;

        bool isPortrait = (VuforiaRuntimeUtilities.ScreenOrientation == ScreenOrientation.Portrait ||
                           VuforiaRuntimeUtilities.ScreenOrientation == ScreenOrientation.PortraitUpsideDown);

        Shader.DisableKeyword(isPortrait ? "PORTRAIT_OFF" : "PORTRAIT_ON");
        Shader.EnableKeyword(isPortrait ? "PORTRAIT_ON" : "PORTRAIT_OFF");

        // determine for which orientation the shaders should be set up:
        switch (VuforiaRuntimeUtilities.ScreenOrientation)
        {
        case ScreenOrientation.Portrait:
            m_Prefix.x = isMirrored ? 0.0f : 1.0f;
            m_Prefix.y = 1.0f;
            m_InversionMultiplier.x = isMirrored ? 1.0f : -1.0f;
            m_InversionMultiplier.y = -1.0f;
            break;

        case ScreenOrientation.PortraitUpsideDown:
            m_Prefix.x = isMirrored ? 1.0f : 0.0f;
            m_Prefix.y = 0.0f;
            m_InversionMultiplier.x = isMirrored ? -1.0f : 1.0f;
            m_InversionMultiplier.y = 1.0f;
            break;

        case ScreenOrientation.LandscapeLeft:
            m_Prefix.x = isMirrored ? 1.0f : 0.0f;
            m_Prefix.y = 1.0f;
            m_InversionMultiplier.x = isMirrored ? -1.0f : 1.0f;
            m_InversionMultiplier.y = -1.0f;
            break;

        case ScreenOrientation.LandscapeRight:
            m_Prefix.x = isMirrored ? 0.0f : 1.0f;
            m_Prefix.y = 0.0f;
            m_InversionMultiplier.x = isMirrored ? 1.0f : -1.0f;
            m_InversionMultiplier.y = 1.0f;
            break;
        }

        // Pass the updated values to the shader
        m_OcclusionMaterial.SetFloat("_TextureRatioX", m_TexureRatio.x);
        m_OcclusionMaterial.SetFloat("_TextureRatioY", m_TexureRatio.y);
        m_OcclusionMaterial.SetFloat("_ViewportSizeX", m_ViewportSize.x);
        m_OcclusionMaterial.SetFloat("_ViewportSizeY", m_ViewportSize.y);
        m_OcclusionMaterial.SetFloat("_ViewportOrigX", m_ViewportOrig.x);
        m_OcclusionMaterial.SetFloat("_ViewportOrigY", m_ViewportOrig.y);
        m_OcclusionMaterial.SetFloat("_ScreenWidth", Screen.width);
        m_OcclusionMaterial.SetFloat("_ScreenHeight", Screen.height);
        m_OcclusionMaterial.SetFloat("_PrefixX", m_Prefix.x);
        m_OcclusionMaterial.SetFloat("_PrefixY", m_Prefix.y);
        m_OcclusionMaterial.SetFloat("_InversionMultiplierX", m_InversionMultiplier.x);
        m_OcclusionMaterial.SetFloat("_InversionMultiplierY", m_InversionMultiplier.y);
    }