Bootstrap

Unity Mesh 钻研(01)

一、Mesh的相关概念及探究

1、Mesh面的拓扑类型

通常网格由三角形(每个面三个顶点索引)组成,但是 在某些情况下,可能要渲染由线条组成的图形内容。这时,创建具有该拓扑类型(点、线)的 Mesh ,并使用这个Mesh进行渲染通常是最高效的作法。

MeshTopology的5种类型:

Triangles网格由三角形构成。
Quads网格由四边形构成。
Lines网格由线条构成。
LineStrip网格是线条带。
Points网格由点构成。

在Unity中,3D的世界的所有图形并不都是由三角形构成的,比如点、线段,这些低维度的几何对象并不能用三角形来定义,所以,Unity的Mesh定义了5种拓扑类型,这些类型的存在,确保Mesh能够描述零维、一维、二维、三维几何空间中的所有几何对象及几何体。

点:Points;

线:Lines、LineStrip;

面:Triangles、Quads;

如何单从数据结构上看Mesh的构成,这五种拓扑类型的Mesh的数据结构是一样的。MeshTopology标识的不同Mesh,其实是向Mesh对象的消费者去说明Mesh的类型,让消费者能正确地解析使用Mesh中的数据体。

在Mesh中,设置Topology值只有一个方法,那就是调用SetIndices()方法并在参数中设置,从这也可以看出,MeshTopology的值主要是用来说明指明对顶点索引的解析方式的。

1、使用Mesh来生成空间中的几何点集:

代码: 

 MeshFilter filter = this.GetComponent<MeshFilter>();

        Mesh mesh = new Mesh();
        Vector3[] vertices = new Vector3[] {
         new Vector3(0, 0, 0),
         new Vector3(1, 0, 0),
         new Vector3(1, 1, 0),
         new Vector3(0, 1, 0)
        };

        int[] indices = new int[] { 0, 1, 2 ,3};

        mesh.vertices = vertices;

        mesh.SetIndices(indices, MeshTopology.Points, 0);

        filter.sharedMesh = mesh;

以上代码可场景中生成了4个点,由于几何中的点是没有大小的,所以Mesh生成的这4个点是没有大小,需在选中Mesh对应的GameObject下才可看见这4个点,如果要使生成有可见的大小,需自定义特殊的Shader。

对应的生成图如下:

由图可见,生成的点很小,即使相机拉得再近也是几乎看不见的,这些点从空间上来讲,是没有大小的。如果要使其明显,只能过通给它设置特殊的Material。

二、Unity Mesh API 集合

 按照编程心法的指导,编程能力与对类库的API的熟悉程度悉悉相关。因此,要全面掌握Unity中的 Mesh类,必须深度熟练Mesh的相关官方API以及与Mesh相关的其它常用第三方类库、工具等。

Mesh的官方编程API参考:Mesh

;