示例#1
0
    // Step 1
    IEnumerator RenderStreetView() // INIT VARIABLES AND DOWNLOAD START
    {
        /* 파노라마 렌더링 시작 */
        // 파노라마 아이디를 통해 파노라마 이미지에 대한 부가 정보를 받는다.
        Initialize();
        LoadingScreen.Show();

        if(enableStackTrace)
        {
            panoIDStack.Push(panoramaID);
        }

        if(Manager.Instance.enableAutoImageCache)
        {
            if (queue.Count == 0)
            {
                print("queue empty");
                yield break;
            }
            print("dequeue : " + panoramaID);
            panoramaID = queue.Dequeue();
        }

        string[] stackList = panoIDStack.ToArray();
        for(int i=0; i<stackList.Length; i++)
        {
            Debug.LogWarning("stack " + i.ToString() + " : " + stackList[i]);
        }

        // FIND OVR CAMERA
        GameObject OVRCameraRig = GameObject.Find("LeapOVRCameraRig");
        if(OVRCameraRig != null)
            screen = OVRCameraRig.GetComponent<OVRLoadingScreen>();
        
        if (screen != null)
            screen.ShowScreen();


        Manager.Instance.SetLoadingText("메타데이터 받는중");
        Debug.Log("ID -> META DATA");
        do
        {
            yield return StartCoroutine(GetMetaData());
            retryCount++;
        } while (metadataExists == false && retryCount < MAX_RETRY);
        Debug.Log("GetMetaData End : Retry Count is " + retryCount.ToString());
        
        if(retryCount == MAX_RETRY)
        {
            Debug.LogError("Get Meta Data Failed");
            retryCount = 0;
        }

        if(Utility.FindCachedImageFromID(panoramaID)) // 해당 데이터가 캐시폴더에 있을 경우
        {
            Debug.Log("Image data is exist");
            // 6방향 이미지를 모두 로드하고
            GetCachedImageFromID(panoramaID);
                yield return new WaitForSeconds(1.0f); // 1초간 대기
            Manager.Instance.SetProgress(100);
        }
        else
        {
            Manager.Instance.SetLoadingText("이미지 타일 받는 중");
            yield return StartCoroutine(GetPanoramaImage(panoramaID, textureWidth, textureHeight));
            Manager.Instance.SetLoadingText("이미지 합치는 중");
            yield return StartCoroutine(MergeTiles());
            Manager.Instance.SetLoadingText("큐브맵 생성 중");
            yield return StartCoroutine(ConvertPanoramaToCubemap());
        }

        // 메타데이터 받고
        // 기존에 다운로드 받은 큐브맵이 있는지 확인한다.
        // 있다면 바로 스카이박스에 적용시키고 끝낸다.

        SetSkybox();
        DrawButtons();

        if (screen != null)
            screen.HideScreen();

        LoadingScreen.Hide();
		
        if (Manager.Instance.enableAutoImageCache)
        {
            for (int i = 0; i < Manager.Instance.nextIDs.Length; i++)
            {
                if (!Utility.FindCachedImageFromID(Manager.Instance.nextIDs[i]))
                {
                    print("enque : " + Manager.Instance.nextIDs[i]);
                    queue.Enqueue(Manager.Instance.nextIDs[i]);
                }
            }
        }
    }
示例#2
0
    IEnumerator RenderStreetViewGather(bool stackPush = false) // INIT VARIABLES AND DOWNLOAD START
    {
        Initialize();
        LoadingScreen.Show();

        if (stackPush)
        {
            Manager.Instance.panoramaStack.Push(panoramaID);
        }

        if (Manager.Instance.enableAutoGathering)
        {
            if (queue.Count == 0)
            {
                print("queue empty");
                yield break;
            }
            print("dequeue : " + panoramaID);
            panoramaID = queue.Dequeue();
        }

        string[] stackList = Manager.Instance.panoramaStack.ToArray();
        for (int i = 0; i < stackList.Length; i++)
        {
            Debug.LogWarning("stack " + i.ToString() + " : " + stackList[i]);
        }

        // FIND OVR CAMERA
        GameObject OVRCameraRig = GameObject.Find("LeapOVRCameraRig");
        if (OVRCameraRig != null)
            screen = OVRCameraRig.GetComponent<OVRLoadingScreen>();

        if (screen != null)
            screen.ShowScreen();

        Debug.Log("ID -> META DATA");
        do
        {
            yield return StartCoroutine(GetMetaData());
            retryCounter++;
        } while (retrieveMetaData == false && retryCounter < 10);
        Debug.Log("GetMetaData End : Retry Count is " + retryCounter.ToString());

        if (retryCounter == 5)
        {
            Debug.LogError("Get Meta Data Failed");
            retryCounter = 0;
        }

        if (enableCache && FindCachedImageFromID(panoramaID)) // 캐시를 사용하고 해당 데이터가 캐시폴더에 있을 경우
        {
            Debug.Log("Image data is exist");
            // 6방향 이미지를 모두 로드하고
            GetCachedImageFromID(panoramaID);
            if (!enableCacheDebugging)
                yield return new WaitForSeconds(2.0f); // 1초간 대기
            Manager.Instance.processCount = 20;
            if (!enableCacheDebugging)
                yield return new WaitForSeconds(2.0f); // 1초간 대기
            Manager.Instance.processCount = 40;
        }
        else
        {
            yield return StartCoroutine(GetPanoramaImage(panoramaID, textureWidth, textureHeight));
            yield return StartCoroutine(MergeTiles());
            yield return StartCoroutine(ConvertPanoramaToCubemap());
        }

        // 메타데이터 받고
        // 기존에 다운로드 받은 큐브맵이 있는지 확인한다.
        // 있다면 바로 스카이박스에 적용시키고 끝낸다.


        SetSkybox();
        DrawButtons();

        if (screen != null)
            screen.HideScreen();

        LoadingScreen.Hide();

        if (Manager.Instance.enableAutoGathering)
        {
            for (int i = 0; i < Manager.Instance.nextIDs.Length; i++)
            {
                if (!FindCachedImageFromID(Manager.Instance.nextIDs[i]))
                {
                    print("enque : " + Manager.Instance.nextIDs[i]);
                    queue.Enqueue(Manager.Instance.nextIDs[i]);
                }
            }
        }

        yield return new WaitForSeconds(1);
    }