网格示例:
顶点:(0,0,0),(10,0,0),(10,10,0),(0,10,0)< - (x,y,z) 三角形:(1,2,3)& (3,4,1)< - 数字在这里引用上面顶点的位置。
所以这里我们有一个2D广场。现在我需要在该列表中添加更多顶点和三角形以形成拉伸形状。三角形必须是顺时针方向,否则它们会被背面剔除。
这有一个简单的算法吗?谢谢。
答案 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)
就是这样。假设我没有打字错误,而且你没有打字错误,你现在应该有你想要的网格。