c# – Unity,将立方体贴图保存为一个圆形图像

我有立方体贴图.我需要将它保存在圆形图像中,例如在PNG中.我失败了几个小时在互联网上搜索.我是怎么做到的那可能吗?

我有图像:joxi.ru/zANd66wSl6Kdkm

我需要保存在png:joxi.ru/12MW55wT40LYjr部件代码,它可以帮助您:

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

最佳答案 您可以创建一个继承ScriptableWizard类的类,该类将从特定的转换中呈现立方体贴图.这是我的代码:

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

    }
}

这基本上是从您在向导中指定的给定位置创建一个新的立方体贴图(要使用向导,请转到顶部菜单中的GameObject,在列表的底部,您将看到’渲染到立方体贴图’).然后,它将获取立方体贴图的六个位置,并将其转换为ConvertToPng()函数中的PNG文件.这适用于我,它应该适合你,因为它基本上只需要一个转换位置.
很抱歉,为了简化它已经尝试了多长时间,但这简化了我可以做到的.

以下是帮助我得出这个结论的链接:

How to convert a face to png

Unity’s scriptable wizard for rendering a cubemap

点赞