Unity Mesh實現圖片切割(三)- mesh繪製

Unity Mesh實現圖片切割(三)- mesh繪製

Unity Mesh實現圖片切割 github博客鏈接
建議瞭解mesh原理,此篇博客不對mesh詳解,值針對此功能做簡單介紹以及思路引導。

一、 創建mesh

要想自己創建mesh並應用,需要用到MeshRendererMeshFilter組件,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了,如果要渲染需要賦值MeshRenderermaterial屬性。

二、 修改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實現圖片切割 - 概述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章