如何解读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
相关产品推荐
相关产品推荐

