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