在OpenMesh中读取顶点的相邻顶点和面时出现问题

2024-06-17 11:25:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我在obj文件中有一个带有闭合孔(缺少几何体的区域)的重建场景的3D网格。我在MeshLab中使用了Close Holes过滤器来恢复孔区域中的几何体

enter image description here

该网格有7728个顶点和2864个面。对于使用网格几何体进行操作,我使用OpenMesh库

我遵循OpenMesh Python绑定的官方tutorial。 我使用方法mesh.vf()和mesh.vv()获取每个顶点的相邻顶点和面。令人惊讶的是,我得到了6141个没有邻居的顶点——方法mesh.vf()和mesh.vv()返回空列表。这很奇怪,只要mesh.faces()获得2864个面

此外,我使用以下代码获得网格中所有顶点的列表

unique_vertices = []
all_vertices = []
print('Total number of faces: ', len(mesh.faces()))
for fh in mesh.faces():
    # print('face ', fh.idx())
    for vh in mesh.fv(fh):
        # print('vertex ', vh.idx())
        all_vertices.append(vh)
    # print('')

unique_vertices = list(set(all_vertices))

此代码返回8592个唯一顶点

您知道OpenMesh API中出现这些奇怪行为的原因吗


Tags: 方法网格区域allprint顶点meshvf
1条回答
网友
1楼 · 发布于 2024-06-17 11:25:39

8592是2864*3。因此,您的集合包含每个面的3个顶点。我假设引用同一顶点的不同句柄对象在集合中不相等。您是否尝试过将vh.idx()插入all_vertices

闭合三角形网格的顶点数约为面数的一半。因此,对于网格,可以预期大约2864/2=1432个顶点。因此,我们预计总共7728个顶点中有6296个孤立顶点。由于您的网格未闭合,因此2864个三角形需要多几个顶点,这只剩下6141个孤立顶点

相关问题 更多 >