创建平面网格

本文关键字:网格 平面 创建 | 更新日期: 2023-09-27 18:31:02

我正在尝试在统一中创建平面网格。我能够获得具有两个三角形的网格,但我无法获得连续两个以上的网格。我正在尝试获得一个冗长的网格,其中许多三角形连续连接在一起。如果你看一下我的代码,我希望你能理解。

我的代码没有错误,但我无法看到网格。我需要帮助。

private float space = 40 / 200;
    MeshFilter mf;
    Mesh mesh;
    private Vector3[] vertices = new Vector3[400];
    void Start () 
    {
        mf = GetComponent<MeshFilter>();
        mesh = mf.mesh;
        mesh.Clear();
        #region Vertices
        for (int i = 0; i < 200; i++)
        {
            vertices[i] = new Vector3(-20 + i * space, -6, 0);          //Top vertices
            vertices[i+200] = new Vector3(-20 + i * space, -10, 0);     //Bottom vertices
        }
        #endregion
        #region Normals
        Vector3[] Normals = new Vector3[400];
        for(int i = 0; i < 400; i++)
            Normals[i] = Vector3.back;
        #endregion
        #region uvs
        Vector2[] uvs = new Vector2[400];
        Vector2 _00 = new Vector2(0, 0);
        Vector2 _10 = new Vector2(1, 0);
        Vector2 _01 = new Vector2(0, 1);
        Vector2 _11 = new Vector2(1, 1);
        for(int i=0; i<200; i++)
        {
            uvs[i] = new Vector2(i/199, 1);
            uvs[i+200] = new Vector2(0, i/199);
        }
        #endregion
        #region Triangles
        int[] Triangle = new int[(200-1) * 2 * 3];
        int t = 0;
        for(int i=0; i<200 - 1; i++)
        {
            Triangle[t++] = i;
            Triangle[t++] = i + 200 + 1;
            Triangle[t++] = i + 200;
            Triangle[t++] = i;
            Triangle[t++] = i + 1;
            Triangle[t++] = i + 200 + 1;
        }
        #endregion
        mesh.vertices = vertices;
        mesh.normals = Normals;
        mesh.uv = uvs;
        mesh.triangles = Triangle;
        mesh.RecalculateBounds();
        mesh.Optimize();
    }

创建平面网格

目前尚不清楚这是否是根本问题,但您正在做整数算术。 float space = 40 / 200; 始终等于 0,i/199 i <199 时始终等于 0。

这意味着您的顶点如下所示:

vertices[i] = new Vector3(-20 + i * 0, -6, 0);          //Top vertices
vertices[i+200] = new Vector3(-20 + i * 0, -10, 0);

紫外线看起来都像:

uvs[i] = new Vector2(0, 1);
uvs[i+200] = new Vector2(0, 0);

您可以将float space = 40 / 200;更改为float space = (float)40 / 200;i/199更改为(float)i/199