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

使用trimesh将顶点子集及关联面转为网格的方法与步骤咨询

使用trimesh从顶点子集与关联面创建网格的方法

完全可以用trimesh实现这个需求,但必须注意面索引的重新映射,不能直接用原面的索引集合,否则新网格会因为索引不匹配而报错或生成错误模型。

你的思路方向是对的,但缺少关键的索引转换步骤——原网格的面中存储的是原顶点数组的索引,当你提取顶点子集后,新顶点数组的索引和原索引已经对应不上了,必须把关联面中的每个顶点索引替换为它在新顶点子集里的位置。

修正后的完整代码示例

import trimesh

# 加载原网格
mesh = trimesh.load("cube.obj")

# 1. 筛选目标顶点(替换成你的vertSubsetGenerator逻辑)
selected_vert_indices = [0, 1, 2, 3, 4]  # 原网格中要保留的顶点下标
subVertices = mesh.vertices[selected_vert_indices]

# 2. 建立原顶点索引到新子集索引的映射
vert_index_map = {old_idx: new_idx for new_idx, old_idx in enumerate(selected_vert_indices)}

# 3. 筛选关联面并转换索引(替换成你的faceSubsetGenerator逻辑)
subFaces = []
for face in mesh.faces:
    # 只保留所有顶点都在选中集合里的面
    if all(vert in vert_index_map for vert in face):
        # 将原面的顶点索引替换为新子集的索引
        new_face = [vert_index_map[vert] for vert in face]
        subFaces.append(new_face)

# 4. 创建并保存新网格
if subFaces:
    meshOut = trimesh.Trimesh(vertices=subVertices, faces=subFaces)
    meshOut.export("sub_mesh.obj")
else:
    print("未找到符合条件的关联面,无法生成有效网格")

关键注意事项

  • 必须丢弃包含未选中顶点的面,否则新网格会出现顶点索引越界问题。
  • 索引映射是核心步骤,省略这一步会导致新网格的面指向错误的顶点位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 00:07:09