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
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
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); –
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# –