2017-03-12 59 views
0

我創建了一個texture2D對象從我從圖庫中挑選的圖片(我在android應用上工作)。我的資源文件夾中有一個名爲「main」的材質,它是一個Skybox/Cubemap材質。如果我想在腳本中設置材質紋理,我需要一個Cubemap紋理,而不是Texture2D紋理。所以,我的問題是:我如何將我的Texture2D轉換爲Cubemap?我發佈了一段代碼,以更好地解釋我的問題(我不知道要寫在「//從mainImage到cubetex」部分)。從texture2D到立方圖

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

回答

0

所以繼承人我用來在立方體的每一面上放置不同的圖像的代碼。它需要一個帶有一組圖像的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