2015-12-24 9 views
5

Mam cubemap. Muszę zapisać go w okrągłym obrazie, na przykład w PNG. Wiele godzin szukania w Internecie w tym, co mi się nie udało. Jak to robię? Czy to jest możliwe?Jedność, Save cubemap to one circle image

mam obraz: joxi.ru/zANd66wSl6Kdkm

muszę zapisać w png: kod joxi.ru/12MW55wT40LYjr część, która pomóc:

tex.SetPixels(cubemap.GetPixels(CubemapFace.PositiveZ)); 
bytes = tex.EncodeToPNG(); 
File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_PositiveZ.png", bytes); 
+0

Way to niejasne z pytaniem, aby ktokolwiek będzie w stanie pomóc. Musisz zapisać mapę cubemap do okrągłego obrazu? Jakiego oprogramowania używasz ... Jaki kod próbowałeś napisać? Jakie błędy dostaję z tym kodem? Potrzebujesz pomocy, by pomóc. – DavidR

+0

mam cubemap: http://joxi.ru/zANd66wSl6Kdkm muszę zapisać w png: http://joxi.ru/12MW55wT40LYjr kod części, które pomogą Ci: tex.SetPixels (cubemap.GetPixels (CubemapFace. PositiveZ)); bytes = tex.EncodeToPNG(); File.WriteAllBytes (Application.dataPath + "/" + cubemap.name + "_ PositiveZ.png", bajty); –

+0

Dobra, DavidR, thaks. Jestem początkujący w http://stackoverflow.com/. Ale czy możesz mi pomóc? Jak zapisać cubemap w fakturze? Używam UNITY3D, kodowanie w C# –

Odpowiedz

2

Można utworzyć klasę, która dziedziczy Klasa ScriptableWizard, która wyrenderuje mapę cubemap z określonej transformacji. Tu jest mój kodu:

using UnityEngine; 
using UnityEditor; 
using System.Collections; 
using System.IO; 

public class RenderCubemapWizard : ScriptableWizard 
{ 

public Transform renderFromPosition; 
public Cubemap cubemap; 

void OnWizardUpdate() 
{ 
    string helpString = "Select transform to render from and cubemap to render into"; 
    bool isValid = (renderFromPosition != null) && (cubemap != null); 
} 

void OnWizardCreate() 
{ 
    // create temporary camera for rendering 
    GameObject go = new GameObject("CubemapCamera"); 
    go.AddComponent<Camera>(); 
    // place it on the object 
    go.transform.position = renderFromPosition.position; 
    go.transform.rotation = Quaternion.identity; 
    // render into cubemap  
    go.GetComponent<Camera>().RenderToCubemap(cubemap); 

    // destroy temporary camera 
    DestroyImmediate(go); 

    ConvertToPng(); 
} 

[MenuItem("GameObject/Render into Cubemap")] 
static void RenderCubemap() 
{ 
    ScriptableWizard.DisplayWizard<RenderCubemapWizard>(
     "Render cubemap", "Render!"); 
} 

void ConvertToPng() 
{ 
    Debug.Log(Application.dataPath + "/" +cubemap.name +"_PositiveX.png"); 
    var tex = new Texture2D (cubemap.width, cubemap.height, TextureFormat.RGB24, false); 
    // Read screen contents into the texture   
    tex.SetPixels(cubemap.GetPixels(CubemapFace.PositiveX));   
    // Encode texture into PNG 
    var bytes = tex.EncodeToPNG();  
    File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_PositiveX.png", bytes);  

    tex.SetPixels(cubemap.GetPixels(CubemapFace.NegativeX)); 
    bytes = tex.EncodeToPNG();  
     File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_NegativeX.png", bytes);  

     tex.SetPixels(cubemap.GetPixels(CubemapFace.PositiveY)); 
     bytes = tex.EncodeToPNG();  
    File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_PositiveY.png", bytes);  

     tex.SetPixels(cubemap.GetPixels(CubemapFace.NegativeY)); 
     bytes = tex.EncodeToPNG();  
     File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_NegativeY.png", bytes);  

     tex.SetPixels(cubemap.GetPixels(CubemapFace.PositiveZ)); 
     bytes = tex.EncodeToPNG();  
     File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_PositiveZ.png", bytes);  

     tex.SetPixels(cubemap.GetPixels(CubemapFace.NegativeZ)); 
     bytes = tex.EncodeToPNG();  
     File.WriteAllBytes(Application.dataPath + "/" + cubemap.name +"_NegativeZ.png", bytes);  
    DestroyImmediate(tex); 

    } 
} 

To w zasadzie tworzy nowy cubemap z danej pozycji, które można określić z poziomu kreatora (w użyciu kreator iść do GameObject w górnym menu, a na dole listy, którą” zobaczę "Renderuj w Cubemap"). Następnie przechwyci sześć pozycji mapy cubemap i przekształci ją w plik PNG z za pomocą funkcji ConvertToPng(). To działa dla mnie i powinno działać dla ciebie, ponieważ w zasadzie potrzebuje tylko pozycji transformacji. Przepraszamy za to, jak długo staramy się go uprościć, ale jest to tak uproszczone, jak to tylko możliwe.

Oto linki, które pomogły mi dojść do takiego wniosku:

How to convert a face to png

Unity's scriptable wizard for rendering a cubemap

+0

P.S. Spowoduje to zapisanie plików .png w folderze zasobów projektu. Może również zająć trochę czasu, aby Unity wyświetlało się w panelu aktywów. –

+0

Dzięki za pomoc, ale ... Zrobiłem coś podobnego: 6 zrzutów ekranu mogę też odebrać. Muszę uzyskać z wypełnionej mapy jedną "okrągłą" teksturę. przykładowy przykład: joxi.ru/12MW55wT40LYjr. –

+0

Wygląda na to, że zrobili zrzut ekranu inspektora mapy kubka, a następnie wycięli część okrągłego podglądu mapy. –