obsidian/笔记文件/2.笔记/Unity中Mesh Filter、Mesh Renderer的作用.md
2025-03-26 00:02:56 +08:00

2.9 KiB
Raw Permalink Blame History

#unity/日常积累

Unity中Mesh Filter、Mesh Renderer的作用

Mesh是Unity内的一个组件称为网格组件。

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就是将图像上每一个点精确对应到模型物体的表面. 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[N3 + 0], v2 = tri[N3 + 1], v3 = tir[N*3 + 2]

 ---------------------------------------------------------------------------------------------------------------