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

标签 c# 3d 2d mesh

我有一组共面的、相连的三角形,即二维网格。现在我需要在 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/

相关文章:

c# - 一定时间后关闭程序的最佳方法

c# - 使用 C# 从存储在 Azure 存储中的 JSON 文件获取值

c# - 如何在 Microsoft Bot Framework 中提供延迟响应

用于图像分割的 C++ 库

ios - iOS 2D 游戏的图形

c# - 将 cookie 从一个 WebClient 复制到另一个 WebClient?

3d - 在 XNA 中使用 CreateOrthographicOffCenter

java - 如何知道一个点是否在复杂的 3D 形状内(.ply 文件)

java - LWJGL 纹理未拉伸(stretch)至四边形

c++ - 使用 Tiles 检查 2D 平台游戏中的碰撞