【问题标题】:from texture2D to cubemap从纹理 2D 到立方体贴图
【发布时间】:2020-04-26 14:45:02
【问题描述】:

我从从图库中挑选的图像创建了一个 texture2D 对象(我正在开发一个 android 应用程序)。我的 Resources 文件夹中有一个名为“main”的材质,它是 Skybox/Cubemap 材质。如果我想在我的脚本中设置材质纹理,我需要一个 Cubemap 纹理,而不是 Texture2D 纹理。所以,我的问题是:如何将我的 Texture2D 转换为 Cubemap?我发布了一段代码来更好地解释我的问题(我不知道在“//from mainImage to cubetex ??”部分写什么)。

 private Texture2D mainImage;
 private Cubemap cubetex = new Cubemap (2048, TextureFormat.RGB24, false);
 private Material mat;

 mainImage = new Texture2D (www.texture.width, www.texture.height);
 mainImage.SetPixels32 (www.texture.GetPixels32());
 mainImage.Apply ();

 // from mainImage to cubetex ?????

 mat = Resources.Load("main") as Material;
 mat.SetTexture ("_Tex", cubetex);

【问题讨论】:

    标签: unity3d textures texture2d


    【解决方案1】:

    以下是我用来在立方体的每一侧放置不同图像的代码。它需要一个带有一组图像的 Texture2d。

        atlas = new Texture2D(512, 512);
        atlasUVs = atlas.PackTextures(atlasTextures, 1, 512);
    
        GetComponent<Renderer>().material.mainTexture = atlas;
    
        mesh = GetComponent<MeshFilter>().mesh;
        originalUVs = new Vector2[mesh.vertices.Length];
    
        // Front
        originalUVs[0] = new Vector2(atlasUVs[0].xMin, atlasUVs[0].yMin);
        originalUVs[1] = new Vector2(atlasUVs[0].xMax, atlasUVs[0].yMin);
        originalUVs[2] = new Vector2(atlasUVs[0].xMin, atlasUVs[0].yMax);
        originalUVs[3] = new Vector2(atlasUVs[0].xMax, atlasUVs[0].yMax);
        // Top
        originalUVs[4] = new Vector2(atlasUVs[1].xMin, atlasUVs[1].yMax);
        originalUVs[5] = new Vector2(atlasUVs[1].xMax, atlasUVs[1].yMax);
        originalUVs[8] = new Vector2(atlasUVs[1].xMin, atlasUVs[1].yMin);
        originalUVs[9] = new Vector2(atlasUVs[1].xMax, atlasUVs[1].yMin);
        // Back
        originalUVs[6] = new Vector2(atlasUVs[2].xMax, atlasUVs[2].yMin);
        originalUVs[7] = new Vector2(atlasUVs[2].xMin, atlasUVs[2].yMin);
        originalUVs[10] = new Vector2(atlasUVs[2].xMax, atlasUVs[2].yMax);
        originalUVs[11] = new Vector2(atlasUVs[2].xMin, atlasUVs[2].yMax);
        // Bottom
        originalUVs[12] = new Vector2(atlasUVs[3].xMin, atlasUVs[3].yMin);
        originalUVs[13] = new Vector2(atlasUVs[3].xMin, atlasUVs[3].yMax);
        originalUVs[14] = new Vector2(atlasUVs[3].xMax, atlasUVs[3].yMax);
        originalUVs[15] = new Vector2(atlasUVs[3].xMax, atlasUVs[3].yMin);
        // Left
        originalUVs[16] = new Vector2(atlasUVs[4].xMin, atlasUVs[4].yMin);
        originalUVs[17] = new Vector2(atlasUVs[4].xMin, atlasUVs[4].yMax);
        originalUVs[18] = new Vector2(atlasUVs[4].xMax, atlasUVs[4].yMax);
        originalUVs[19] = new Vector2(atlasUVs[4].xMax, atlasUVs[4].yMin);
        // Right        
        originalUVs[20] = new Vector2(atlasUVs[5].xMin, atlasUVs[5].yMin);
        originalUVs[21] = new Vector2(atlasUVs[5].xMin, atlasUVs[5].yMax);
        originalUVs[22] = new Vector2(atlasUVs[5].xMax, atlasUVs[5].yMax);
        originalUVs[23] = new Vector2(atlasUVs[5].xMax, atlasUVs[5].yMin);
        mesh.uv = originalUVs;
    

    这是它所基于的链接:

    http://answers.unity3d.com/questions/542787/change-texture-of-cube-sides.html

    【讨论】:

      猜你喜欢
      • 2019-06-03
      • 2014-05-06
      • 1970-01-01
      • 2018-07-29
      • 2014-12-15
      • 2012-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多