Python trimesh模块

trimesh 是一个用于处理三角网格(Triangle Mesh)的 Python 模块,广泛应用于 3D 计算机图形学、机器人、3D 打印、计算机视觉等领域。它提供了丰富的功能,如加载、保存、操作、分析和可视化三角网格模型。


📦 安装

pip install trimesh

如果需要支持更多格式(如 .stl, .obj, .off 等),可以安装额外依赖:

pip install trimesh[easy]

🧱 核心功能

1. 加载网格

import trimesh

# 从文件加载网格
mesh = trimesh.load_mesh('path/to/your/model.obj')

# 也可以加载多个文件(返回场景或网格列表)
scene = trimesh.load('path/to/your/scene.gltf')

支持的格式包括:obj, stl, ply, glb, gltf, off, dae, fbx, 3mf, amf, x3d 等。


2. 网格属性

print(mesh.vertices)      # 顶点坐标 (n, 3)
print(mesh.faces)         # 面索引 (m, 3)
print(mesh.face_normals)  # 面法线
print(mesh.vertex_normals) # 顶点法线
print(mesh.is_watertight) # 是否是封闭体
print(mesh.is_winding_consistent) # 是否一致的面朝向

3. 网格操作

重定向网格
mesh.apply_transform(trimesh.transformations.rotation_matrix(90, [0, 1, 0]))
合并多个网格
mesh1 = trimesh.load_mesh('model1.stl')
mesh2 = trimesh.load_mesh('model2.stl')
combined = mesh1 + mesh2
修复网格
mesh.fix_normals()  # 自动修正法线方向
mesh.remove_duplicate_faces()
mesh.remove_degenerate_faces()

4. 网格分析

体积和表面积
print("体积:", mesh.volume)
print("表面积:", mesh.area)
检查是否是封闭体
print("是否封闭:", mesh.is_watertight)
截面切片
slice = mesh.section(plane_origin=mesh.centroid, plane_normal=[0, 0, 1])
射线检测
locations, index_ray, index_tri = mesh.ray.intersects_location(
    ray_origins=[[0, 0, 10]],
    ray_directions=[[0, 0, -1]]
)

5. 网格简化(Decimate)

simplified = mesh.simplify_quadratic_decimation(target_face_count=1000)

6. 可视化

mesh.show()

支持使用 pygletmatplotlib 进行简单可视化。

你也可以导出为 HTML 可交互查看:

scene = mesh.scene()
scene.save('mesh.html', file_type='html')

7. 保存网格

mesh.export('output.obj')
mesh.export('output.stl')

📌 示例:加载并显示一个模型

import trimesh

# 加载模型
mesh = trimesh.load_mesh('bunny.obj')

# 显示
mesh.show()

# 打印信息
print(f"顶点数量: {len(mesh.vertices)}")
print(f"面数量: {len(mesh.faces)}")
print(f"体积: {mesh.volume}")

🔧 高级用途

  • 碰撞检测:结合 trimesh.collision 模块进行碰撞检测。
  • 空间查询mesh.kdtreemesh.facets 等。
  • 路径规划:与 pyrenderscipy 等配合使用。
  • 3D 打印预处理:修复、法线方向统一、封闭检测等。

📚 官方文档


如果你有特定需求,比如 网格简化、碰撞检测、切片、布尔运算 等,可以告诉我,我可以提供更详细的示例代码。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐