Unity Mesh实现图片切割(三)- mesh绘制

Posted on By

建议了解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实现图片切割 - 概述