概述
本篇为Unity Mesh基础的第一篇,通过一个最基本的平面四边形网格来进行阐述。在此之前先对网格(mesh)做一个简介。网格为最基本的模型表达,通过点构成线,再由线构成三角形,最后由三角形构成面,然后通过材质来进行网格表面的表达,如阴影,贴图等。Unity除了ui的mesh,其他都需要MeshFilter来确定网格形状,通过Material以及MeshRenderer来进行网格渲染。
Mesh的组成
Mesh由顶点组成,再有三个顶点构成。所以Mesh必须定义顶点以及顶点如何构成三角形,这是最基本的三个要素,其次还需要定义uv来确定贴图如何覆盖在图形表面,如果需要还需定义顶点的法线或者切向,法线跟光照有关,而切向则会影响纹理凹凸问题,本文以四边形为例进行阐述。
四边形顶点
顶点个数为4,即左下,右下,右上以及左上。size为正方向尺寸。
protected override Vector3[] Vertices
{
get
{
Vector3[] vertices = new Vector3[4];
vertices[0] = Vector3.zero * size;
vertices[1] = Vector3.right * size;
vertices[2] = new Vector3(1, 1, 0) * size;
vertices[3] = Vector3.up * size;
return vertices;
}
}
三角形排列
三角形排列为int类型数组,保存顶点的索引号,每三个组成一个三角形。下述代码即为左下,左上,右下组成第一个三角形,剩下组成第二个三角形,排列顺序为顺时针方向。
protected override int[] Triangles
{
get
{
int[] triangles = new int[6]
{
0,3,1,1,3,2
};
return triangles;
}
}
Mesh的uv
如果给网格赋值贴图,则需要定义uv,如下定义则为图片左下角对应mesh的左下角,右上角对应右上角。
protected override Vector2[] Uvs
{
get