【问题标题】:Meshlab - Get IDs of selected verticesMeshlab - 获取选定顶点的 ID
【发布时间】:2014-04-16 18:11:54
【问题描述】:

我想选择网格的一个区域并获取所选顶点的 ID,以便我可以在我的自定义 c++ 处理管道中使用它们。

例如,如果有一个 3d 手部网格,可以选择属于每个指尖的顶点。获取这些顶点的 ID 对于一些应用程序非常有用,例如跟踪、动画等。

Meshlab 显然在后台使用了这些顶点的 ID,但是这些信息可以暴露给用户吗?网上有很多关于如何(以各种方式)选择网格的某些区域并应用某些处理功能的教程,但是我没有找到有关获取有关所选区域的原始信息的内容。

【问题讨论】:

    标签: meshlab


    【解决方案1】:

    MeshLab中顶点id的显示方式有两种:

    • 渲染 => 显示标签,这将在每个顶点上显示顶点 ID。
    • 单击黄色的“获取信息”按钮,然后单击一个三角形。如果你的网格很密集,那么它就不是真的可读。

    注意基于 0 和 1 的索引,我不确定它们在 MeshLab 中基于什么。

    2017 年更新:使用新的 MeshLab 版本 (2016.12),可以使输出更具可读性。单击“获取信息”按钮后,可以按Space 从面部拾取切换到顶点拾取。然后可以按p将顶点id和坐标记录到日志小窗口中。

    另一方面,Render => Show Label 不再起作用,它给出了错误CANNOT START DECORATOR: the layer contains too many faces and vertices.

    【讨论】:

    • 对我来说,选择“显示标签”没有任何作用。尽管如此,在单击 GetInfo(或从“编辑”菜单中选择它)后,您单击的任何三角形都将显示其顶点编号和坐标(在 GetInfo 之前放大以方便阅读)。
    • 为了完整起见,MeshLab 有从 0 开始的索引。
    【解决方案2】:

    使用“获取信息”按钮并按照左侧的说明按“t”并选择顶点并按 p.

    【讨论】:

      【解决方案3】:

      我找到的解决方案相当繁琐。

      看起来,尽管 Meshlab 显然在后台使用了这些 ID,但这些信息并没有暴露给用户。所以我遵循这个启发式:

      • 使用标准 MeshLab 工具选择感兴趣的顶点。
      • 反转选择。
      • 删除所有顶点,并得到一个 1 点点云/网格作为结果。
      • 将此导出为 .off 文件。
      • 打开导出的文件并读取这个唯一点的坐标。一个坐标(例如 X)就足够了。
      • 在您的原始 .off 文件或原始网格/点云结构中搜索以找到具有此坐标的点/顶点。
      • 你有它,你有原始结构中所选顶点的 ID。
      • 然后(这是特定于应用程序的,根据我的需要),使用 PCL,我为我的点云创建了一个 Kd-Tree,使用选定的点(红色)作为“查询”来获取一些最近的邻居(绿色)。

      结果:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        • 1970-01-01
        • 1970-01-01
        • 2011-11-13
        • 1970-01-01
        相关资源
        最近更新 更多