1

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

在此处输入图像描述

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

我遵循 OpenMesh Python 绑定的官方教程。我使用方法 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 中这些奇怪行为的原因是什么吗?

4

1 回答 1

1

8592 为 2864*3。所以你的集合包含每个面的 3 个顶点。我假设引用相同顶点的不同句柄对象在集合中不被认为是相等的。你试过插入vh.idx()all_vertices

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

于 2021-02-16T11:26:19.493 回答