gpt4 book ai didi

c# - 如何挤出平面二维网格,赋予其深度

转载 作者:太空狗 更新时间:2023-10-29 22:24:39 24 4
gpt4 key购买 nike

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

示例网格:

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

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

有没有简单的算法?谢谢。

最佳答案

假设你想挤出距离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)

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

关于c# - 如何挤出平面二维网格,赋予其深度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3848923/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com