2013-05-14 60 views
0

我正在生成一個能夠在紋理的邊緣不受像素明智影響的情況下進行縮放的平面。這架飛機需要能夠保持其邊界比例,但能夠伸展到幾乎任何尺寸。網格有8個頂點和10個三角形來製作邊框。無論如何,這是我得到的。忽略網格幾何體上的數字。如何爲紋理邊框設置UV

enter image description here

是否可以編輯UV的,讓我得到想要的結果呢? 這裏的代碼:

Mesh mesh = new Mesh(); 
    var renderer = mesh.AddRenderer(); 


    //create verticies 

    mesh.vertices = new Vector3[] { 

     //vertices in order for convienience 
     Manager.GUI.ScreenToWorldPoint(new Vector3(0f,0f,0f)),       //0 
     Manager.GUI.ScreenToWorldPoint(new Vector3(padding,padding,0)),     //1 
     Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, padding,0f)),   //2 
     Manager.GUI.ScreenToWorldPoint(new Vector3(width,0f,0f)),       //3 
     Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, height - padding,0f)),//4 
     Manager.GUI.ScreenToWorldPoint(new Vector3(width,height,0f)),      //5 
     Manager.GUI.ScreenToWorldPoint(new Vector3(padding, height - padding, 0f)),  //6 
     Manager.GUI.ScreenToWorldPoint(new Vector3(0f,height,0f)),      //7 
    }; 



    //create triangles 
    mesh.triangles = new int[] { 
     7,5,6, 
     6,5,4, 
     4,5,3, 
     2,4,3, 
     0,2,3, 
     0,1,2, 
     0,7,6, 
     0,6,1, 
     1,6,4, 
     1,4,2 
}; 

    //create UV's uvs are in order of creation for convienience 
     mesh.uv = new Vector2[] { 
      new Vector2(0f,0f), 
      new Vector2(padding/width, padding/height), 
      new Vector2((width-padding)/width, padding/height), 
      new Vector2(1f,0f), 
      new Vector2((width - padding)/width,(height-padding)/height), 
      new Vector2(1f,1f), 
      new Vector2(padding/width,(height-padding)/height), 
      new Vector2(0f,1f) 





    }; 



    mesh.calculateNormals(); 
    mesh.calculateBounds(); 
    renderer.Texture = mytex; 
    return plane; 
} 

填充是圍繞忽略縮放,而高度和寬度的形狀的尺寸的紋理所定義的像素。

+2

不,它不是,它總是會被拉長。您需要爲頂部,底部,左側,右側**和每個角落**分開四邊形。 – 2013-05-14 15:54:23

+0

@George 所以我需要生成9架飛機?或者我是否需要修改幾何圖形,使其有9個四邊形(或18個三角形)?在任何一種情況下,我設置UV的方式會給我想要的結果嗎?也爲三分之一的索引模式是這樣的東西(從上到下,從左到右「,」代表下一行)'13 11 10 9,14 12 8 7,15 2 4 6,0 1 3 5' – Fornoreason1000 2013-05-14 16:48:50

+1

將會有9個四邊形,所以總共9 * 2 = 18個三角形。由於你要改變你的幾何體,所以你需要改變你的UV,你可能會發現最簡單的方法是讓一個紋理有4條直線邊緣(因爲它們是相同的,但是是旋轉的),另一個是角落(所有4角落是相同的,旋轉。)。 – 2013-05-14 18:22:47

回答

0

喬治說,我生成的網格使得無法縮放圖像沒有什麼有趣的。修復網格不得不重新成爲可行的東西。該代碼現在

Mesh mesh = new Mesh(); 
    var renderer = mesh.AddRenderer(); 
     mesh.vertices = new Vector3[] { 

       //vertices in order for convienience 
       Manager.GUI.ScreenToWorldPoint(new Vector3(0f,0f,0f)),       //0 
       Manager.GUI.ScreenToWorldPoint(new Vector3(padding,0f,0f)),      //1 
       Manager.GUI.ScreenToWorldPoint(new Vector3(padding,padding,0)),     //2 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, 0f,0f)),    //3 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, padding,0f)),   //4 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width,0f,0f)),       //5 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width,padding,0f)),     //6 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width , height - padding,0f)),   //7 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding, height - padding,0f)),//8 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width,height,0f)),      //9 
       Manager.GUI.ScreenToWorldPoint(new Vector3(width - padding,height,0f)),   //10 
       Manager.GUI.ScreenToWorldPoint(new Vector3(padding, height, 0f)),     //11 
       Manager.GUI.ScreenToWorldPoint(new Vector3(padding, height - padding, 0f)),  //12 
       Manager.GUI.ScreenToWorldPoint(new Vector3(0f,height,0f)),      //13 
       Manager.GUI.ScreenToWorldPoint(new Vector3(0f,height - padding,0f)),    //14 
       Manager.GUI.ScreenToWorldPoint(new Vector3(0f,padding,0f)),      //15 
      }; 



      //create triangles 
      mesh.triangles = new int[] { 
       15,2,0, 
       1,0,2, 
       1,2,4, 
       1,4,3, 
       3,4,6, 
       3,6,5, 
       4,8,7, 
       4,7,6, 
       8,10,9, 
       8,9,7, 
       12,10,8, 
       12,11,10, 
       14,11,12, 
       14,13,11, 
       15,14,12, 
       15,12,2, 
       2,12,8, 
       2,8,4 

    }; 

      //create UV's uvs are in order of creation for convienience 
       mesh.uv = new Vector2[] { 
        new Vector2(0f,0f), //0 
        new Vector2(padding/width, 0f), //1 
        new Vector2(padding/width, padding/height), //2 
        new Vector2((width-padding)/width, 0f), //3 
        new Vector2((width-padding)/width, padding/height), //4 
        new Vector2(1f,0f), //5 
        new Vector2(1f,padding/height), //6 
        new Vector2(1f, (height - padding)/height), //7 
        new Vector2((width - padding)/width,(height-padding)/height),//8 
        new Vector2(1f,1f), //9 
        new Vector2((width -padding)/width,1f), //10 
        new Vector2(padding/width,1f), //11 
        new Vector2(padding/width,(height-padding)/height), //12 
        new Vector2(0f,1f), //13 
        new Vector2(0f,(height - padding)/height), //14 
        new Vector2(0f,padding/height) //15 





      }; 



      mesh.RecalculateNormals(); 
      mesh.RecalculateBounds(); 

      return plane; 

希望它可以幫助其他的程序員,