目录
trimesh 加载obj
trimesh入门
主要功能
安装
基本用法
1. 加载和保存 3D 模型
2. 几何操作
3. 网格分析
4. 可视化
5. 布尔运算
6. 碰撞检测
trimesh 加载obj
template_mesh = trimesh.load_mesh(r"E:\project\3d\lilpotat--pytorch3d\pixie_data\smplx_tex.obj", process=False, maintain_order=True)print(template_mesh.vertices.shape, template_mesh.faces.shape)
vertices = copy.deepcopy(np.array(smpl["verts"]).squeeze())vertices[:, 1:] = -vertices[:, 1:] # -y -z# 第一个人的相机scaled_focal_length = smpl["scaled_focal_length"].tolist()render_res = smpl["render_res"].tolist()camera_trans_list.append(smpl["cam_t"])bsmpl_dir = pklpath.replace(".pkl", "_b_smpl")bretarget_dir = pklpath.replace(".pkl", "_b_retarget")# final_dir = pklpath.replace(".pkl", "_final")bsmpl_mesh = trimesh.load(f"{bsmpl_dir}/frame_{frame_idx:04d}.obj", process=False, force='mesh', maintain_order=True)# bretarget_mesh = trimesh.load(f"{bretarget_dir}/frame_{frame_idx:04d}.obj", process=False, force='mesh') # maintain_order=True# bretarget_list.append(bretarget_mesh)bretarget_list.append(f"{bretarget_dir}/frame_{frame_idx:04d}.obj")mesh00 = trimesh.Trimesh(vertices=vertices, faces=template_mesh.faces)mesh00.export(f"{bretarget_dir}/frame_{frame_idx:04d}.obj")
template_mesh = trimesh.load_mesh(r"E:\project\3d\lilpotat--pytorch3d\pixie_data\smplx_tex.obj", process=False, maintain_order=True) 代码什么意思
这段代码是用 Python 和 trimesh
库加载一个 3D 模型文件(.obj
格式)并进行一些特定的设置。具体来说:
-
template_mesh = trimesh.load_mesh(...)
这是调用trimesh
库中的load_mesh
函数来加载 3D 网格数据(template_mesh
将保存加载后的模型)。 -
r"E:\project\3d\lilpotat--pytorch3d\pixie_data\smplx_tex.obj"
这是模型文件的路径,指定了要加载的.obj
文件。 -
process=False
这意味着加载模型时不会自动处理模型数据,例如修复法线、合并重复的顶点等,所有的原始数据都会被保留。 -
maintain_order=True
这个参数确保在加载网格时,顶点的顺序和原始文件中的顺序保持一致,可能用于某些需要顶点顺序不变的情况。
trimesh入门
Trimesh
是一个用于处理三角形网格的 Python 库,提供了加载、处理、分析和可视化 3D 模型的功能。它支持多种 3D 文件格式,能够进行几何操作、布尔运算、碰撞检测等任务。
主要功能
-
加载和保存 3D 模型:支持 OBJ、STL、PLY、OFF 等格式。
-
几何操作:包括平移、旋转、缩放、布尔运算等。
-
网格分析:计算表面积、体积、法线、曲率等。
-
可视化:支持 3D 模型的交互式可视化。
-
碰撞检测:检测网格之间的碰撞。
-
点云处理:支持点云与网格的转换和处理。
安装
pip install trimesh
基本用法
1. 加载和保存 3D 模型
import trimesh# 加载模型 mesh = trimesh.load('model.stl')# 保存模型 mesh.export('output.obj')
2. 几何操作
# 平移 mesh.apply_translation([10, 0, 0])# 旋转 mesh.apply_transform(trimesh.transformations.rotation_matrix(45, [0, 1, 0]))# 缩放 mesh.apply_scale(2.0)
3. 网格分析
# 计算表面积 surface_area = mesh.area# 计算体积 volume = mesh.volume# 计算边界框 bounds = mesh.bounds
4. 可视化
# 显示模型 mesh.show()
5. 布尔运算
# 创建两个球体 sphere1 = trimesh.creation.icosphere(subdivisions=3, radius=1.0) sphere2 = trimesh.creation.icosphere(subdivisions=3, radius=0.8)# 布尔差集 difference = sphere1.difference(sphere2) difference.show()
6. 碰撞检测
# 创建两个立方体 cube1 = trimesh.creation.box(extents=[1, 1, 1]) cube2 = trimesh.creation.box(extents=[1, 1, 1])# 移动第二个立方体 cube2.apply_translation([0.5, 0.5, 0.5])# 检测碰撞 collision = cube1.collision(cube2) print(collision.is_collision)