我正在进行一个项目,该项目需要将三角汤转换为实际的结构化网格,以便将操作应用于网格。 网格对象是具有以下各项的半边型结构:

Vertex { vec3 position, int edge /* any half edge leaving the vertex */}
HalfEdge {int vertex, int pair}
Triangle {int vertex[3], int normal[3]}
BoundaryEdge {int vertex, int pair, int next, int prev}

索引将所有内容都引用到这些项目的数组中。 我已经到了连接所有内部边缘以及设置所有边缘和边界边缘对的地步,我的问题是如何为边界边缘循环设置下一个和上一个索引(即,如何找到这些索引)从未连接的边界边列表中循环)。

如果循环都很简单,那将很容易。 但是,我正在使用的网格可以具有边界“结点”,即共享一个顶点的多个边界环。 这样一来,在创建边界循环时就存在一些要点,其中算法必须确定多个可能的边中的哪一个是要循环的正确下一个边。 如果选择了错误的边缘,则可能无法遍历入射到顶点的所有边缘。

到目前为止,我所遇到的是每次遇到这样的交界处时,代码基本上都会查看离开和进入顶点的半边的下一个索引和上一个索引的所有可能分配,并找到使它成为第一个的分配因此,从离开顶点的任何一个半边开始,可以使用edge.pair.next访问每个其他这样的半边(仅这些边),以到达下一个这样的半边。 当前,该解决方案效率不是很高(我不认为),我什至都不知道它是否正确,并且添加与1个或更少的三角形相邻的三角形也存在相同的问题。

我想知道的是,a。)我的解决方案是否真的可以正常工作,b。)是否还有另一个更常用/更常用的解决方案来找到我尚未找到的这些边缘循环?

===============>>#1 票数:0

我遇到了类似的问题。 我的情况是,几个区域(表示为一组三角形)在一个/多个顶点处相交,它们是边界。 目的是找到每个区域的边界。 我发现使用单环邻域(即edge.pair.next)既困难又效率低下。

我所做的是,对于每个区域,我都考虑了所有三角形并寻找边界边。 每当找到边界边缘时,我都会将starting_vertex和ending_vertex记录到一个哈希图中(map [starting_vertex] = ending_vertex,map [ending_vertex] = starting_vertex)。 遍历该区域中的所有三角形后,您将从边界顶点开始,并使用哈希图构造边界。

如果在三角剖分边界上有孔,则由于三角剖分不是流形,上述方法将失败。 解决方法:1.如果原始表面上有孔,请尝试使用插值法填充孔。 2.如果原始表面上没有孔,但是生成的三角剖分中有一个三角剖分,则问题是由生成三角剖分的不良代码引起的。 因此,您可能需要更改生成三角剖分的算法。

  ask by Catlin translate from so

未解决问题?本站智能推荐:

2回复

在Python中为3维数据表面数据构造三角网格

我有一个3维点的数据集,我想使用python构建一个网格。 我见过的所有软件都要求您提供优势。 python中是否有一个程序将3D点作为输入并输出一组三角形网格? 如果可能的话,我希望网格划分是统一的。 谢谢-伊莱
4回复

3D模型文件并从中创建三角形网格

我是新来的。 我正在学习C ++,所以我对事物没有太大的了解(好吧,我有很多编程经验,但有其他语言。我也知道如何使用计算机xD)。 我决定开始研究游戏引擎。 我知道这并不容易,但这就是我想要这样做的一个原因 - 尝试/获得经验是我学习的最佳方式。 所以,我从渲染器开始,但我不知道如何
2回复

用于标记三角形网格边缘的算法

介绍 作为一个更大的程序(与渲染体积图形相关)的一部分,我有一个小而棘手的子问题,其中任意(但有限)三角形2D网格需要以特定方式进行标记。 我刚刚写了一个解决方案(见下文),它对我当时的测试网格来说已经足够好了,尽管我意识到这种方法对于人们可以想到的每个可能的网格都可能不会很好。 现在
2回复

使用Numpy快速制作网格三角形网格

考虑一个规则的矩阵,该矩阵代表编号的节点,如图所示: 我想列出一张图中所有三角形的列表。 这将导致以下二维列表: [[0,1,4],[1,5,4],[1,2,5],[2,6,5],...,[11,15,14]] 假设矩阵的尺寸为( Nr X Nc )(在这种情况下为(4X4)
1回复

XNA中的多网格模型的边界框

我想在XNA项目中发生冲突,因此尝试使用BoundingBoxes。 我想与房屋的墙壁发生碰撞,因此我使用以下代码为模型中的每个网格制作了BoundingBox: 我收到了6个相等的BoundingBoxes。 每个BoundingBox都是相同的,因此碰撞仅适用于一堵墙。 这是代
1回复

如何在网格中渲染一些三角形边界

我需要在渲染的几何体中勾勒边缘。 如果网格在它们之间的边界上弯曲一定程度,则边缘被定义为相邻的三角形边界。 我计算这些边缘并将它们存储在每个网格的单独模型中。 我想知道,我怎么能得到类似于一个3ds max可以渲染的结果? 这就是我如何渲染网格及其边缘模型的情况,以防万一我
1回复

将一个动画模型中的多个网格组合成一个网格libgdx

我有一些动画角色模型(我自己没有创建)我在Maya中看过它们,它们由5-7个单独的网格组成; 身体,眼睛,斗篷,剑等。在libgdx渲染的每个模型增加了大约35个绘制调用...我想减少这个。 我在想我应该把模型的所有网格合二为一。 我无法在Maya中做到这一点(好吧,它使用了组合网格功能,
1回复

Xna模型网格部分

所以,我对Xna开发有点新意,在阅读了关于3D模型的处理之后,我有一个疑问。 我知道,当我们有一个模型时,该模型可以有多个网格,每个网格有多个部分,但我并没有真正得到这样的划分,在我看来就像是一个矫枉过正。 特别是,我没有得到网格和部分之间的差异,后者是什么。 我知道这个基本话题,但你可以
1回复

3d形状数据如何在计算机图形学中投影到2d屏幕上?

如果我错了,请纠正我,但我认为3d图形中的所有元素都是网格。 所以问题是,如何获取网格数据并基于网格数据,相机位置,相机和网格的旋转等来创建二维投影。 我意识到这相当复杂,只要知道这个技术术语叫什么,我就会感到满意,以便我进行搜索和研究。
1回复

裁剪三角形网格

我可以从.stl文件加载TriangleMesh。 我可以画画,一切都很好。 但是,当我需要从形状中“裁剪”此TriangleMesh时,事情会变得复杂。 我想要一个看起来像这样的方法: 我知道TriangleMesh可处理点(x,y,z),面和纹理坐标。 我不知道如何检索给定点