2015-12-24 5 views
5

Ich habe Cubemap. Ich muss es in einem kreisförmigen Bild speichern, zum Beispiel in PNG. Viele Stunden der Suche im Internet in dem ich gescheitert bin. Wie ich es mache? Ist das möglich?Einheit, Speichern von Cubemap zu einem Kreis Bild

Ich habe Bild: joxi.ru/zANd66wSl6Kdkm

Ich brauche in png zu speichern: joxi.ru/12MW55wT40LYjr Part-Code, der Ihnen helfen:

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

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

+0

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

+0

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

Antwort

2

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

+0

P. S. Dadurch werden die PNG-Dateien im Ordner "Assets" Ihres Projekts gespeichert. Es kann auch ein wenig dauern, bis Unity im Anlagenbereich angezeigt wird. –

+0

Danke für Hilfe, aber ... Ich habe etwas Ähnliches gemacht: 6 Screenshots kann ich auch empfangen. Ich muss von der gefüllten Cubemap eine "runde" Textur bekommen. ein exemplarisches Beispiel: joxi.ru/12MW55wT40LYjr. –

+0

Das sieht so aus, als hätten sie einen Screenshot des Inspektors der Cubemap gemacht und dann den runden Vorschaubereich der Cubemap abgeschnitten. –