如何挤出平面2D网格,给它深度

时间:2010-10-03 07:09:27

标签: c# 3d 2d mesh

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

网格示例:

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

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

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

1 个答案:

答案 0 :(得分:10)

假设您想要按距离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)

就是这样。假设我没有打字错误,而且你没有打字错误,你现在应该有你想要的网格。