Sie eine Klasse erstellen, die erbt ScriptableWizard-Klasse, die eine Cubemap aus einer bestimmten Transformation rendert. Hier ist mein Code:
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);
}
}
Diese im Grunde eine neue Cubemap von der gegebenen Position erzeugt, die Sie innerhalb des Assistenten angeben (verwenden Sie die Assistenten zum Gameobject im oberen Menü gehen und am unteren Rande der Liste, die Sie‘ Siehe 'Render in Cubemap'). Es greift dann die sechs Positionen der Cubemap auf und konvertiert sie in der ConvertToPng() -Funktion in eine PNG-Datei von with. Dies funktioniert für mich und es sollte für Sie arbeiten, da es im Grunde nur eine Transformationsposition benötigt. Sorry für wie lange es versucht wird, es zu vereinfachen, aber so einfach wie ich es machen könnte.
Hier sind die Links, die ich zu diesem Schluss kommen geholfen:
How to convert a face to png
Unity's scriptable wizard for rendering a cubemap
Weg zu vage einer Frage für jemand in der Lage sein, Ihnen zu helfen. Sie müssen eine Cubemap in einem kreisförmigen Bild speichern? Welche Software verwendest du? Was ist der Code, den du versucht hast zu schreiben? Welche Fehler bekommen Sie mit diesem Code? Brauchen Sie Details, um zu helfen. – DavidR
Ich habe Cubemap: http://joxi.ru/zANd66wSl6Kdkm Ich brauche in png zu speichern: http://joxi.ru/12MW55wT40LYjr Part-Code, der Ihnen helfen: tex.SetPixels (cubemap.GetPixels (CubemapFace. PositivZ)); bytes = tex.EncodeToPNG(); File.WriteAllBytes (Application.dataPath + "/" + cubemap.name + "_ PositiveZ.png", Bytes); –
Okay, DavidR, thaks. Ich bin Anfänger in http://stackoverflow.com/. Aber kannst du mir helfen? Wie kann man Cubemap in Textur speichern? Ich benutze UNITY3D, Codierung in C# –