private PanoramaImage ExtractFromFlickr(string body) { if (body == null) { return(new PanoramaImage()); } PanoramaImage image = new PanoramaImage(); string[] urls = Regex.Split(body, @"""displayUrl"""); string smallUrl = ""; string mediumUrl = ""; string largeUrl = ""; string xlargeUrl = ""; for (int i = 1; i < urls.Length; i++) { smallUrl = (smallUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+?)"",""width"":100") : smallUrl); mediumUrl = (mediumUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":640") : mediumUrl); largeUrl = (largeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":1024") : largeUrl); xlargeUrl = (xlargeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":2048") : xlargeUrl); } image.url.Add(smallUrl); image.url.Add(mediumUrl); image.url.Add(largeUrl); image.url.Add(xlargeUrl); return(image); }
private IEnumerator FetchStereo() { analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "RequestedStereo", "foo", 1); PanoramaImage image = null; if (analytics.stereoViewCount >= 0 && analytics.stereoViewCount < Recommendations.stereoImages.Count) { image = Recommendations.stereoImages[analytics.stereoViewCount]; } if (image != null) { string domain = new System.Uri(image.url[0]).Host; statusMessage.text = "Waiting for " + domain + "..."; DrawPanorama(image); analytics.LogStereoViewCount(); } else { statusMessage.text = "Error getting stereoscopic panorama from index"; } // clear previous info foreach (Transform child in titleMessage.transform) { Destroy(child.gameObject); } yield break; }
private IEnumerator FetchStereoImg() { WWW www; ImageInfo flickrImage; analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "RequestedStereoImg", "foo", 1); statusMessage.text = "Waiting for www.flickriver.com..."; www = new WWW(STEREO_IMAGES_URL); networkConns.Add(www); print("Fetching page: " + STEREO_IMAGES_URL); yield return(www); flickrImage = ExtractFromFlickriver(www.text); if (flickrImage != null) { flickrImage.imageId = ExtractIdFromFlickrUrl(flickrImage.url); } if (flickrImage != null) { www = new WWW(flickrImage.url); networkConns.Add(www); statusMessage.text = "Waiting for www.flickr.com..."; print("Fetching page: " + flickrImage.url); yield return(www); PanoramaImage image = ExtractFromFlickr(www.text); image.stereoType = StereoType.CROSS_EYE; flickrImage.width /= 2; image.imageInfo = flickrImage; www = null; statusMessage.text = ""; DrawPanorama(image); analytics.LogStereoImgViewCount(); } else { statusMessage.text = "Failed to find a stereo image to show!"; analytics.LogException("Failed to extract URL from Flickriver", true); } // clear previous info foreach (Transform child in titleMessage.transform) { Destroy(child.gameObject); } }
private PanoramaImage ExtractImageInfo(string body) { if (body == null) { return(new PanoramaImage()); } PanoramaImage image = new PanoramaImage(); string[] lines = body.Split(new string[] { System.Environment.NewLine }, System.StringSplitOptions.None); if (lines.Length > 0) { ImageInfo flickrImage = new ImageInfo(); flickrImage.url = ""; flickrImage.imageId = long.Parse(lines[0]); flickrImage.width = int.Parse(lines[3]); flickrImage.height = int.Parse(lines[4]); flickrImage.title = lines[1]; flickrImage.author = lines[2]; string smallUrl = lines[5]; string mediumUrl = lines[6]; string largeUrl = lines[7]; string xlargeUrl = lines[8]; image.url.Add(smallUrl); image.url.Add(mediumUrl); image.url.Add(largeUrl); image.url.Add(xlargeUrl); image.imageInfo = flickrImage; } return(image); }
private void DrawPanorama(PanoramaImage image) { try { taskQueue = new List <object> (); List <Material> mats = null; Material m1 = null, m2 = null; switch (image.stereoType) { case StereoType.NONE: m1 = new Material(monoPanoramaMat); monoEyePano.SetActive(true); leftEyePano.SetActive(false); rightEyePano.SetActive(false); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.SBS: m1 = new Material(leftSBSPanoramaMat); m2 = new Material(rightSBSPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.OVER_UNDER: m1 = new Material(leftOUPanoramaMat); m2 = new Material(rightOUPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.OVER_UNDER_INV: m1 = new Material(leftOUInvPanoramaMat); m2 = new Material(rightOUInvPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.CROSS_EYE: m1 = new Material(leftCrossImgMat); m2 = new Material(rightCrossImgMat); monoEyePano.SetActive(false); leftEyePano.SetActive(false); rightEyePano.SetActive(false); leftEyeImg.SetActive(true); rightEyeImg.SetActive(true); break; } if (monoEyePano.activeSelf) { monoEyePano.GetComponent <Renderer>().sharedMaterial = m1; mats = new List <Material>() { m1 }; } if (leftEyePano.activeSelf) { leftEyePano.GetComponent <Renderer>().sharedMaterial = m1; mats = new List <Material>() { m1, m2 }; } if (rightEyePano.activeSelf) { rightEyePano.GetComponent <Renderer>().sharedMaterial = m2; mats = new List <Material>() { m1, m2 }; } if (leftEyeImg.activeSelf) { leftEyeImg.GetComponent <Renderer>().sharedMaterial = m1; leftEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1); leftEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward; leftEyeImg.transform.LookAt(Vector3.zero); leftEyeImg.transform.RotateAround(leftEyeImg.transform.position, leftEyeImg.transform.up, 180f); mats = new List <Material>() { m1, m2 }; imgCaption.transform.localPosition = new Vector3(0, -0.55f, 0); imgCaption.transform.localRotation = Quaternion.identity; TextMesh caption = imgCaption.GetComponent <TextMesh>(); caption.anchor = TextAnchor.MiddleCenter; caption.color = Color.black; string shortUrl = "flic.kr/p/" + Base58.Encode(image.imageInfo.imageId); caption.text = "by: " + image.imageInfo.author + " (" + shortUrl + ")"; caption.characterSize = 0.3f; /*reportImage.transform.localPosition = new Vector3(0, -0.63f, 0); * reportImage.transform.localRotation = Quaternion.identity; * TextMesh reportText = reportImage.GetComponent<TextMesh>(); * reportText.characterSize = 0.3f; * reportImage.SetActive(true); * * saveFavorite.transform.localPosition = new Vector3(0, -0.74f, 0); * saveFavorite.transform.localRotation = Quaternion.identity; * TextMesh saveFavoriteText = saveFavorite.GetComponent<TextMesh>(); * saveFavoriteText.characterSize = 0.3f; * saveFavorite.SetActive(true);*/ } if (rightEyeImg.activeSelf) { rightEyeImg.GetComponent <Renderer>().sharedMaterial = m2; rightEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1); rightEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward; rightEyeImg.transform.LookAt(Vector3.zero); rightEyeImg.transform.RotateAround(rightEyeImg.transform.position, rightEyeImg.transform.up, 180f); mats = new List <Material>() { m1, m2 }; } foreach (string url in image.url) { if (url.Length > 0) { taskQueue.Add(new ApplyImageTask(url, mats)); } } taskQueue.Add(new ShowTutorialTask()); if (image.imageInfo != null) { currentImageId = image.imageInfo.imageId; } StartCoroutine(ProcessTasks()); } catch (System.Exception e) { analytics.LogException("Error drawing panorama: " + e.Message + "; " + e.StackTrace, true); } }
private IEnumerator FetchMono() { // analytics.gav3.LogEvent ("Panorama:" + analytics.sessionId, "RequestedMono", "foo", 1); // analytics.LogEvent ("Panorama", "Requested"); WWW www; // analytics.LogEvent ("Panorama", "DebugNewWWW"); ImageInfo flickrImage; // analytics.LogEvent ("Panorama", "DebugNewImageInfo"); // first try recommendation flickrImage = GetRecommendedImage(analytics.monoViewCount); // analytics.LogEvent ("Panorama", "DebugGotRecommendation"); analytics.gav3.LogEvent("Panorama:" + analytics.sessionId, "DebugGotRecommendation", "foo", 1); // else get random if (flickrImage == null) { analytics.LogEvent("Panorama", "FetchingRandom"); statusMessage.text = "Waiting for www.flickriver.com..."; bool censored; Stopwatch s = new Stopwatch(); s.Start(); do { www = new WWW(IMAGES_URL); networkConns.Add(www); print("Fetching page: " + IMAGES_URL); yield return(www); flickrImage = ExtractFromFlickriver(www.text); if (flickrImage != null) { flickrImage.imageId = ExtractIdFromFlickrUrl(flickrImage.url); } censored = IsCensored(flickrImage); } while (censored); s.Stop(); analytics.LogTiming("Loading", s.ElapsedMilliseconds, "Flickriver", "FetchPage"); } else { analytics.LogEvent("Panorama", "FetchingRecommendation" + analytics.monoViewCount); } if (flickrImage != null) { Stopwatch s = new Stopwatch(); analytics.LogEvent("Panorama", "DebugFetchFlickr"); s.Start(); www = new WWW(flickrImage.url); networkConns.Add(www); statusMessage.text = "Waiting for www.flickr.com..."; print("Fetching page: " + flickrImage.url); yield return(www); s.Stop(); analytics.LogEvent("Panorama", "DebugGotFlickr"); analytics.LogTiming("Loading", s.ElapsedMilliseconds, "Flickr", "FetchPage"); PanoramaImage image = ExtractFromFlickr(www.text); image.imageInfo = flickrImage; www = null; statusMessage.text = ""; if (renderMode == RenderMode.MONO_PANORAMA) { /* draw! */ DrawPanorama(image); ShowInfo(flickrImage); /* log */ analytics.LogMonoViewCount(); analytics.LogEvent("Panorama", "ImagesLoading"); } } else { statusMessage.text = "Failed to find a panorama to show!"; analytics.LogException("Failed to extract URL from Flickriver", true); } }
private PanoramaImage ExtractFromFlickr(string body) { if (body == null) { return new PanoramaImage(); } PanoramaImage image = new PanoramaImage (); string[] urls = Regex.Split (body, @"""displayUrl"""); string smallUrl = ""; string mediumUrl = ""; string largeUrl = ""; string xlargeUrl = ""; for (int i = 1; i < urls.Length; i++) { smallUrl = (smallUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+?)"",""width"":100") : smallUrl); mediumUrl = (mediumUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":640") : mediumUrl ); largeUrl = (largeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":1024") : largeUrl ); xlargeUrl = (xlargeUrl.Length == 0 ? MatchUrl(urls[i], @":""(\S+)"",""width"":2048") : xlargeUrl ); } image.url.Add (smallUrl); image.url.Add (mediumUrl); image.url.Add (largeUrl); image.url.Add (xlargeUrl); return image; }
private void DrawPanorama(PanoramaImage image) { try { taskQueue = new List<object> (); List<Material> mats = null; Material m1 = null, m2 = null; switch (image.stereoType) { case StereoType.NONE: m1 = new Material(monoPanoramaMat); monoEyePano.SetActive(true); leftEyePano.SetActive(false); rightEyePano.SetActive(false); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.SBS: m1 = new Material(leftSBSPanoramaMat); m2 = new Material(rightSBSPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.OVER_UNDER: m1 = new Material(leftOUPanoramaMat); m2 = new Material(rightOUPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.OVER_UNDER_INV: m1 = new Material(leftOUInvPanoramaMat); m2 = new Material(rightOUInvPanoramaMat); monoEyePano.SetActive(false); leftEyePano.SetActive(true); rightEyePano.SetActive(true); leftEyeImg.SetActive(false); rightEyeImg.SetActive(false); break; case StereoType.CROSS_EYE: m1 = new Material(leftCrossImgMat); m2 = new Material(rightCrossImgMat); monoEyePano.SetActive(false); leftEyePano.SetActive(false); rightEyePano.SetActive(false); leftEyeImg.SetActive(true); rightEyeImg.SetActive(true); break; } if (monoEyePano.activeSelf) { monoEyePano.GetComponent<Renderer>().sharedMaterial = m1; mats = new List<Material>() {m1}; } if (leftEyePano.activeSelf) { leftEyePano.GetComponent<Renderer>().sharedMaterial = m1; mats = new List<Material>() {m1, m2}; } if (rightEyePano.activeSelf) { rightEyePano.GetComponent<Renderer>().sharedMaterial = m2; mats = new List<Material>() {m1, m2}; } if (leftEyeImg.activeSelf) { leftEyeImg.GetComponent<Renderer>().sharedMaterial = m1; leftEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1); leftEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward; leftEyeImg.transform.LookAt(Vector3.zero); leftEyeImg.transform.RotateAround(leftEyeImg.transform.position, leftEyeImg.transform.up, 180f); mats = new List<Material>() {m1, m2}; imgCaption.transform.localPosition = new Vector3(0, -0.55f, 0); imgCaption.transform.localRotation = Quaternion.identity; TextMesh caption = imgCaption.GetComponent<TextMesh>(); caption.anchor = TextAnchor.MiddleCenter; caption.color = Color.black; string shortUrl = "flic.kr/p/" + Base58.Encode(image.imageInfo.imageId); caption.text = "by: " + image.imageInfo.author + " (" + shortUrl + ")"; caption.characterSize = 0.3f; /*reportImage.transform.localPosition = new Vector3(0, -0.63f, 0); reportImage.transform.localRotation = Quaternion.identity; TextMesh reportText = reportImage.GetComponent<TextMesh>(); reportText.characterSize = 0.3f; reportImage.SetActive(true); saveFavorite.transform.localPosition = new Vector3(0, -0.74f, 0); saveFavorite.transform.localRotation = Quaternion.identity; TextMesh saveFavoriteText = saveFavorite.GetComponent<TextMesh>(); saveFavoriteText.characterSize = 0.3f; saveFavorite.SetActive(true);*/ } if (rightEyeImg.activeSelf) { rightEyeImg.GetComponent<Renderer>().sharedMaterial = m2; rightEyeImg.transform.localScale = new Vector3(image.imageInfo.width * PX_TO_METERS, image.imageInfo.height * PX_TO_METERS, 1); rightEyeImg.transform.position = 133.4f * statusMessage.gameObject.transform.parent.transform.forward; rightEyeImg.transform.LookAt(Vector3.zero); rightEyeImg.transform.RotateAround(rightEyeImg.transform.position, rightEyeImg.transform.up, 180f); mats = new List<Material>() {m1, m2}; } foreach (string url in image.url) { if (url.Length > 0) { taskQueue.Add (new ApplyImageTask (url, mats)); } } taskQueue.Add (new ShowTutorialTask ()); if (image.imageInfo != null) { currentImageId = image.imageInfo.imageId; } StartCoroutine( ProcessTasks () ); } catch (System.Exception e) { analytics.LogException("Error drawing panorama: " + e.Message + "; " + e.StackTrace, true); } }
private PanoramaImage ExtractImageInfo(string body) { if (body == null) { return new PanoramaImage(); } PanoramaImage image = new PanoramaImage (); string[] lines = body.Split (new string[]{System.Environment.NewLine}, System.StringSplitOptions.None); if (lines.Length > 0) { ImageInfo flickrImage = new ImageInfo (); flickrImage.url = ""; flickrImage.imageId = long.Parse(lines[0]); flickrImage.width = int.Parse(lines[3]); flickrImage.height = int.Parse(lines[4]); flickrImage.title = lines[1]; flickrImage.author = lines[2]; string smallUrl = lines[5]; string mediumUrl = lines[6]; string largeUrl = lines[7]; string xlargeUrl = lines[8]; image.url.Add (smallUrl); image.url.Add (mediumUrl); image.url.Add (largeUrl); image.url.Add (xlargeUrl); image.imageInfo = flickrImage; } return image; }