unity Mesh的简单实现

 

[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]

在场景中创建空物体 并为其添加 MeshFilter, MeshRenderer

创建一个mesh 

Mesh mesh = new Mesh();
MeshFilter filter = GetComponent<MeshFilter>();
filter.mesh = mesh;
mesh.name = "zzzz";

获取顶点坐标 如果是按顺时针获取的则法线方向是向上的,反之逆时针获取的则法线方向向下  

这个平面是根据空物体的中心点 为Vector3(0, 0, 0) 顺时针方向四个点组成

mesh.vertices = GetVertices();//获取顶点坐标

Vector3[] GetVertices()
{
    return new Vector3[] {
        new Vector3(0, 0, 0),
        new Vector3(1, 0, 0),
        new Vector3(1, 1, 0),
        new Vector3(0, 1, 0)
   };
}

mesh渲染是把一个面分成很多三角形进行渲染的 以每三个点为一组构成三角形 

mesh.triangles = GetTrangles();

int[] GetTrangles()
{
  return new int[] {  
    0, 1, 2,
    0, 2, 3
  };
}

mesh.uv = GetUV();

//设置uv贴图如果不设置这个mesh将不会展现一张完整的图片 返回的v2数组与顶点数组相对应的

但不同的是uv坐标是以左下角为Vector2(0, 0)

所以:Vector3(0, 0, 0)   -- >    Vector2(1, 0)
         Vector3(1, 0, 0)   -->   Vector2(0, 0)
         Vector3(1, 1, 0)    -->     Vector2(0, 1)
         Vector3(0, 1, 0)    -->    Vector2(1,1)

 

Vector2[] GetUV()
{
   return new Vector2[] {
    new Vector2(1, 0),
    new Vector2(0, 0),
    new Vector2(0, 1),
    new Vector2(1,1)
   };
}

 

posted @ 2020-06-11 10:32  zjp971014  阅读(425)  评论(0)    收藏  举报