6

我有一组共面连接的三角形,即二维网格。现在我需要在 z 轴上将它挤出几个单位。网格由一组顶点定义,渲染器通过匹配三角形数组来理解这些顶点。

示例网格:

顶点:(0,0,0), (10,0,0), (10,10,0), (0,10,0) <-- (x,y,z) 三角形:(1, 2, 3) & (3, 4, 1) <-- 这里的数字指的是上面一个顶点的位置。

所以这里我们有一个二维正方形。现在我需要在该列表中添加更多顶点和三角形来制作拉伸形状。三角形必须是顺时针方向,否则它们会被背面剔除。

有一个简单的算法吗?谢谢你。

4

1 回答 1

13

假设您要挤出距离 z,您需要按照以下步骤操作:

0)让 n 是原始顶点数(在您的示例中为 4)

1) 对于顶点数组中的每个顶点,将 (0,0,z) 添加到它,并将结果添加到您的顶点数组中,总共 2*n 个顶点。因此,对于您的示例,您将添加顶点 (0,0,z), (10,0,z), (10,10,z), (0,10,z) 到您的顶点数组中,总共2 * 4 = 8个顶点。

2) 为您的原始网格创建边界(而不是内部)边缘列表。为此,请创建所有三角形边的列表(每个三角形的 3 条边按顺时针顺序排列)。然后删除成对的相等但相反的边缘(这些是内部边缘)。对于您的示例,您将从 6 条边开始,并在删除边对 (3,1) 和 (1,3) 后以 4 条边结束。

3) 对于三角形列表中的每个三角形 (a,b,c),创建一个对应的三角形 (a+n,b+n,c+n)。这些将是挤出的面

4) 最后,您要创建挤压形状的侧面。对于您在步骤 2 中创建的边界边列表中的每条边 (a,b),添加三角形 (a,b,b+n) 和 (b+n,a+n,a)

就是这样。假设我没有错别字,你也没有错别字,你现在应该有你想要的网格。

于 2010-10-03T18:45:31.283 回答