Python trimesh模块
·
文章目录
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()
支持使用 pyglet 或 matplotlib 进行简单可视化。
你也可以导出为 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.kdtree、mesh.facets等。 - 路径规划:与
pyrender、scipy等配合使用。 - 3D 打印预处理:修复、法线方向统一、封闭检测等。
📚 官方文档
如果你有特定需求,比如 网格简化、碰撞检测、切片、布尔运算 等,可以告诉我,我可以提供更详细的示例代码。
更多推荐

所有评论(0)