Mesh指的是模型的网格,Unity中内置的几种简单的几何模型都具有自己的网格:
Unity开放了定制网格的方式,通过这些方式可以构建出许多很复杂的图案或几何体,网上有很多通过Mesh生成特定模型的方式,这里主要介绍的是我自己对于参数的一些理解。
要生成一个Mesh网格,需要为Mesh提供两种最基本的数据集:顶点坐标和三角形配置信息(其他的如uv,法线等,都不是必须的,但可以提供很多效果,这边不做介绍)
先看一段简单的代码:
[ExecuteInEditMode]
public class CubeTest : MonoBehaviour {
[Header("顶点")]
public Vector3[] newVertices;
[Header("三角形")]
public int[] newTriangles;
[ContextMenu("Create")]
public void Create() {
Mesh mesh = GetComponent<MeshFilter>().sharedMesh;
mesh.vertices = newVertices;
mesh.triangles = newTriangles;
}
}
然后是界面配置
效果
很简单的一个三角形网格就出来了,接下来是参数的详细讲解
首先是顶点信息
在界面配置中,我们给了三个点,分别是(0,0,0)(1,0,0)(0,1,0)
三个点对应的可以在上图的012中标出,坐标是相对与模型空间中的,模型原点是不变的。
记住点的位置和在顶点数组中的顺序,还有观察的面,这点很重要,在后续配置三角形信息时会用到。
在unity中可以通过左上角的按钮切换显示的坐标系,Pivot表示模型坐标系,Center表示Mesh坐标系,中心点即Mesh的中心点,是会随着Mesh的改变而改变的。
然后是三角形配置
在unity中,三角形面片都是单面的,只有在一个面能够看到他们,换个角度就看不到了,如下图,注意比较坐标系
那么怎么确定在哪个面能够看到这个三角网格呢,这都是可以配置的,由构成三角形的顶点顺序决定的。
在上面的截图中,我们配置的是(0,1,2)这个顺序,从这个角度,注意从0,1,2这样的顺序遍历过去,刚好是顺时针的
答案很明确了,从哪边看,构成三角形的三个点顺序是顺时针的,说明这个三角网格就是渲染在哪个面的,再做一次验证,我们将三角形的顺序改成0,2,1
效果很明显,从另一面就可以看到这个三角形了(注意蓝色轴(Z轴)的方向),三角形顺序改成(2,1,0)(1,0,2)效果都是一样的
如果要在两个面都能看到这个三角形怎么办?
因为在unity中,三角形面片都是单面的,所以单个三角形是没办法做到的,我们需要再两个面都构建三角形,这在unity中是可行的,让我们看看效果
这样,在两个面都可以观察到这个面片了。
这些都是最基础的东西,同理,通过复杂计算,配置顶点的坐标和三角形的构成,就可以生成各种复杂的模型。