怎么绘制属于自己网格信息

来源:互联网 发布:vb编程入门视频教程 编辑:程序博客网 时间:2024/05/01 21:33

unity里面一个物体要渲染出来 需要两个组件 一个是MeshFilter 一个是MeshRender

一个mesh 想要绘制出来需要设置的信息:

//这两个是必须的
vertices : 定点坐标
tangents: 三角形坐标索引

//可有可无的
uv: uv贴图
tangents : 法线贴图 左下角是 0,0点 最大是 1,1 点

tangents:
在unity中是顺时针存储,如果逆时针的话 只能在物体内部看见

这里写图片描述

//绘制过程:
1,绘制顶点坐标
2,根据顶点坐标设置三角形3个顶点坐标
3,设置UV
4,设置发现
//后面两部并不是都需要

    private Vector3[] vertices;    public int xSize = 10;    public int ySize = 5;    private Mesh mesh;    void Awake()    {        Generate();    }    private void Generate()    {        this.GetComponent<MeshFilter>().mesh = mesh = new Mesh();        vertices = new Vector3[(xSize + 1) * (ySize + 1)];        //法线信息        Vector4[] tangents = new Vector4[vertices.Length];        Vector4 tangent = new Vector4(1f, 0f, 0f, -1f);        Vector2[] uv = new Vector2[vertices.Length]; //控制UV贴图        for (int i = 0, y = 0; y <= ySize; y++)        {            for (int x = 0; x <= xSize; x++, i++)            {                vertices[i] = new Vector3(x + 1, y + 1);                //yield return wait;                uv[i] = new Vector2(x/(float)xSize, y/(float) ySize);                tangents[i] = tangent;            }        }        mesh.vertices = vertices;        mesh.uv = uv;        mesh.tangents = tangents;        ////设置三角形定点信息        //int[] triangles = new int[6];        //triangles[0] = 0;        //triangles[1] = xSize + 1;        //triangles[2] = 1;        ////绘制第二个三角形        //triangles[3] = xSize +1;        //triangles[4] = xSize + 2;        //triangles[5] = 1;        //mesh.triangles = triangles;        int[] triangles = new int[xSize * ySize * 6];// 一个方形两个三角形  6个定点信息        for (int ti = 0, vi = 0, y = 0; y < ySize; y++, vi++)        {            for (int x = 0; x < xSize; x++, ti += 6, vi++)            {                triangles[ti] = vi;                triangles[ti + 3] = triangles[ti + 2] = vi + 1;                triangles[ti + 4] = triangles[ti + 1] = vi + xSize + 1;                triangles[ti + 5] = vi + xSize + 2;            }        }        mesh.triangles = triangles;        mesh.RecalculateNormals();    }
0 0