我在 2D 空间中有一个点列表,我需要从它们构建顶点和索引缓冲区(我使用的是 Unity)。我不知道如何以正确的顺序处理点来做到这一点。
下面的星号是一个示例,我的输入保证有效,但在编译时是未知的。
mesh0 = new Mesh();
// vertices for a star shape
List<Vector3> vertices0 = new List<Vector3>();
List<int> triangles0 = new List<int>();
vertices0.Add(new Vector3(150, 0, 0));
vertices0.Add(new Vector3(121, -90, 0));
vertices0.Add(new Vector3(198, -35, 0));
vertices0.Add(new Vector3(102, -35, 0));
vertices0.Add(new Vector3(179, -90, 0));
// this bit is wrong
for(int i = 0; i < vertices0.Count - 1; i++) {
triangles0.Add(i);
triangles0.Add(i + 1);
triangles0.Add(i + 2);
}
mesh0.SetVertices(vertices);
mesh0.SetTriangles(triangles, 0);
我希望在这种情况下三角形是[0, 1, 2, 2, 3, 4, 0, 4, 3]
这将是渲染星形的有效索引缓冲区。谁能指出我正确的方向?
你的三角形数组将是
0, 1, 2
1, 2, 3
2, 3, 4
3, 4, 5
5 正在甩掉你,但你也只有 4 个三角形。
在这种情况下,您需要将三角形缠绕起来
我建议将三角形生成重新格式化为:
for(int i = 0; i < vertices0.Count; i++)
{
triangles0.Add(i);
triangles0.Add((i + 1) % vertices0.Count);
triangles0.Add((i + 2) % vertices0.Count);
}
如果取模运算符大于计数,则此处的模运算符将"包装"您的值。我还从顶点计数中删除了 -1,因为您实际上并没有添加第 5 个三角形
这仍然没有形成一颗星星,尽管它做了一个五边形,并输出以下三角形:
0,1,2
1,2,3
2,3,4
3,4,0
4,0,1
它也有很多重叠的三角形,但我相信你可以改造它,从这里做你想做的事