You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解读PyMeshLab中face_face_adjacency_matrix的数值?

在PyMeshLab中获取指定面的相邻面列表

首先得搞清楚face_face_adjacency_matrix的实际结构:这个矩阵是一个N×3的数组(N是网格的总面数),每一行对应一个面,行内的三个元素分别代表该面三条边对应的相邻面ID。如果某条边是网格的边界边(没有相邻面),对应的位置会是-1(部分旧版本可能用面自身的索引代替,需要注意)。

你给出的示例数组有10行,说明这个网格有10个面。比如第一行[0,0,0],意味着第0号面的三条边都和自己相邻(这种情况一般出现在非流形网格里,比如边被多个面共享,或者面是自闭合的);而像[0,1,2]这样的行,就表示对应面的三条边分别和0号、1号、2号面相邻。

实际获取指定面相邻面的代码示例

import pymeshlab as ml

# 加载网格
ms = ml.MeshSet()
ms.load_new_mesh("your_mesh.obj")

# 获取当前网格对象
mesh = ms.current_mesh()

# 获取面-面邻接矩阵
ff_adj = mesh.face_face_adjacency_matrix()

# 指定要查询的面索引(比如第5号面)
target_face_id = 5

# 提取相邻面ID,过滤掉无效值(-1)
adjacent_faces = [face_id for face_id in ff_adj[target_face_id] if face_id != -1]

print(f"第{target_face_id}号面的相邻面:{adjacent_faces}")

注意事项

  • 如果你的网格是非流形网格(比如一条边被3个及以上的面共享),这个矩阵里的对应位置只会返回第一个找到的相邻面ID,这种情况需要额外处理。
  • 部分旧版本PyMeshLab中,边界边对应的相邻面ID可能是面自身的索引,而非-1,此时过滤条件要改成face_id != target_face_id。

内容的提问来源于stack exchange,提问作者misan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 19:42:09