Unity Mesh實現圖片切割(三)- mesh繪製
Unity Mesh實現圖片切割 github博客鏈接
建議瞭解mesh原理,此篇博客不對mesh詳解,值針對此功能做簡單介紹以及思路引導。
一、 創建mesh
要想自己創建mesh並應用,需要用到MeshRenderer
和MeshFilter
組件,Mesh
就是MeshFilter
上的一個屬性值。
若不考慮渲染圖像,創建mesh需要聲明mesh的頂點vertices
和三角面triangles
,頂點就是上篇博客最後求出來的排好序的點,三角面是任意三個點規定的三角形(必須是順時針)的下標數組,如圖:
mesh的頂點vertices
就是0,1,2,3排好序的點數組Vector3[]
。
mesh的三角行就是 a 和 b,a和b的表達方式爲new int[] {0, 1, 2, 0, 2, 3};
,每三個頂點下標確定一個三角形。
代碼創建如圖網格mesh方式:
GameObject meshObj = new GameObject("MeshObj");
MeshRenderer meshRenderer = meshObj.AddComponent<MeshRenderer>();
MeshFilter meshFilter = meshObj.AddComponent<MeshFilter>();
Mesh mesh = new Mesh();
meshFilter.mesh = mesh;
Vector3[] meshVertices = new Vector3[]{p0, p1, p2, p3,};
int[] meshTriangles = new int[] {0, 1, 2, 0, 2, 3};
mesh.triangles = meshTriangles;
mesh.vertices = meshVertices;
由此就可以創建一個mesh了,如果要渲染需要賦值MeshRenderer
的material
屬性。
二、 修改uv
貼圖UV和mesh的關係
可以將mesh理解爲一個框架,給定了很多頂點就是vertices。經貼圖理解爲布,布的左下角是(0, 0),將這個布按照自己規定的點釘到框架上,中間的像素會自己計算拉伸、位置等。這些自己規定的看就是UV(是跟mesh的vertices長度相同的數組)。
uv的設置方式
貼圖的座標系如下:
貼圖的uv座標是左下角爲(0, 0),右上角爲(1, 1)的座標系,設置uv座標就是按照貼圖座標系,將mesh的頂點的x y值映射到[0, 1]區間內。
相當於未切割前的整圖左下角頂點爲貼圖座標系原點,其他頂點一次映射。一定要注意uv座標數組長度適合vertices座標數組長度相同。
通過mesh.uv = meshUv;
可是這mesh的uv。
PS:另外如有需要,可以設置法線mesh.normals = meshNormals;
全文鏈接: Unity Mesh實現圖片切割 - 概述