#unity/日常积累 ## Unity中[Mesh](https://so.csdn.net/so/search?q=Mesh&spm=1001.2101.3001.7020) Filter、Mesh Renderer的作用 # Mesh是Unity内的一个组件,称为[网格](https://so.csdn.net/so/search?q=%E7%BD%91%E6%A0%BC&spm=1001.2101.3001.7020)组件。 **Mesh:**是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括**顶点坐标**,**法线**,**纹理坐标**,**三角形绘制序列**等其他有用属性和功能。因此建网格,就是画三角形;画三角形就是定位三个点。 **Mesh Filter:**内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,也可以为MeshFilter设置Mesh内容。 **Mesh Render:**是用于把网格渲染出来的组件。MeshFilter的作用就是把Mesh扔给MeshRender将模型或者说是几何体绘制显示出来。 它们之间的关系大概就是Unity中的对象就是GameObject,每个GameObject都可以有一个MeshFilter组件(也可以没有),该组件又有Mesh属性(这个一定有),而该属性又有顶点坐标,法线等属性。而如果GameObject里有MeshFilter,则必须要Mesh Renderer才能将此网格渲染出来,不然是看不见该网格的。 ---------------------------------------------------------------------------------------------------------------  **Mesh的属性**: - 顶点坐标(vertex) - 法线(normal) - 纹理坐标(uv) - 三角形序列(triangle) **顶点坐标**:顶点坐标数组存放Mesh的每个顶点的空间坐标,假设某mesh有n个顶点,则vertex的size为n **法线**:法线数组存放mesh每个顶点的法线,大小与顶点坐标对应,normal[i]对应顶点vertex[i]的法线 **纹理坐标**:它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将[图像](http://baike.baidu.com/view/42116.htm)上每一个点精确对应到模型物体的表面. uv[i]对应vertex[i] **三角形序列**:每个mesh都由若干个三角形组成,而三角形的三个点就是顶点坐标里的点,三角形的数组的size = 三角形个数 * 3. 例如:某mesh有四个顶点0,1,2,3, V0(1, 1, 0), V1(-1, 1, 0), V2(1, -1, 0), V3(-1, -1, 0) 那么它们可以组成这样的一个网格, tri[0] = ver[0],ver[3],ver[1],tri[1] = ver[0],ver[2],ver[3], ![[Pasted image 20220501161047.png]] 注意:三角形的顶点顺序必须是顺时针,顺时针表示正面,逆时针表示背面,而unity3d在渲染时默认只渲染正面,背面是看不见的。 那么该三角形可以表示为: tri  = new int[2 * 3]{0, 3, 1,   0, 2, 3}; 如何要获取第N个三角形对应的三个顶点坐标,则:v1 = tri[N*3 + 0], v2 = tri[N*3 + 1], v3 = tir[N*3 + 2]  ---------------------------------------------------------------------------------------------------------------