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

Liq*_*uid 5 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广场.现在我需要在该列表中添加更多顶点和三角形以形成拉伸形状.三角形必须是顺时针方向,否则它们会被背面剔除.

有一个简单的算法吗?谢谢.

bra*_*jam 11

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

而已.假设我没有打字错误,而且你没有打字错误,你现在应该有你想要的网格.