葫芦岛市网站建设_网站建设公司_SQL Server_seo优化
2025/12/29 18:49:11 网站建设 项目流程

1 mesh 加载函数

1.1 函数原型

1.2 参数说明

1.3代码展示

​编辑

1.4 判断mesh文件是否读取成功

2 mesh 保存函数

2.1 函数原型

2.2 参数说明

2.3 代码示例

2.4 Open3D支持的mesh类型

3 mesh 格式转换

3.1 ply 转 obj

3.2 ply 转 stl

3.3 ply 转 off

3.4 ply 转 gltf

1 mesh 加载函数

1.1 函数原型

read_triangle_mesh(filename: str, enable_post_processing: bool = False, print_progress: bool = False)

1.2 参数说明

  • filename,要可视化mesh的的路径和文件名。必选参数

当调用read_triangle_mesh函数时,需要将要读取的文件的路径和文件名作为filename参数传递给该函数。函数将解析该文件并将其转换为Open3D中的三角网格数据结构,该数据结构包含三角形的顶点和面片信息。通过这种方式,可以方便地使用Open3D库对三角网格进行可视化、处理、分析等操作。

  • enable_post_processing参数是用于控制是否启用后处理的选项。可选参数

在读取三角网格时,Open3D会对其进行一些后处理操作,包括去除重复的顶点和边缘,移除无用的顶点和边缘,以及重新计算法线等。这些后处理操作可以优化三角网格,使其更加紧凑和高效。当 enable_post_processing 参数设置为 True 时,将启用这些后处理操作;当设置为 False 时,则不启用。默认情况下,该参数被设置为 False。

  • print_progress参数用于控制是否在读取模型时输出读取进度信息。可选参数

默认情况下,该参数为False,不会在读取过程中输出进度信息,如果将其设置为True,则会输出进度信息。
如果读取的模型较大,可能需要一些时间来完成读取,因此在读取过程中输出进度信息对于了解读取进展情况非常有用。但是,在某些情况下,例如只需要读取一个非常小的模型时,输出进度信息可能会显得多余,所以可以通过设置该参数来控制输出行为。

1.3代码展示

import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) o3d.visualization.draw_geometries([mesh],window_name='把门开开',mesh_show_wireframe=False)

1.4 判断mesh文件是否读取成功

使用is_empty()函数判断

  • True:未读取到mesh文件
  • False:成功读取mesh文件
import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) o3d.visualization.draw_geometries([mesh],window_name='把门开开',mesh_show_wireframe=False)

2 mesh 保存函数

2.1 函数原型

write_triangle_mesh(filename:str,mesh:open3d.cpu.pybind.geometry.TriangleMesh,write_ascii:bool=False,compressed:bool=False,write_vertex_normals:bool=True,write_vertex_colors:bool=True,write_triangle_uvs:bool=True,print_progress:bool=False)

2.2 参数说明

  • filename必选参数,要保存的文件的路径和名称。
  • mesh必选参数,要保存的 TriangleMesh 对象。
  • write_ascii可选参数,默认为 False,表示是否将数据以 ASCII 格式写入文件。如果设置为 True,则数据将以可读的文本形式写入文件,否则以二进制形式(binary)写入文件。
  • compressed可选参数,默认为 False,表示是否将数据压缩写入文件。如果设置为 True,则写入的数据将会被压缩,否则不会。
  • write_vertex_normals可选参数,默认为 True,表示是否要写入顶点法线数据。
  • write_vertex_colors可选参数,默认为 True,表示是否要写入顶点颜色数据。
  • write_triangle_uvs可选参数,默认为 True,表示是否要写入三角形 UV 数据。
  • print_progress可选参数,默认为 False,表示是否要在控制台打印写入进度。

需要注意的是,这些参数并不是全部必须要传入的,只需要传入需要的参数即可。

2.3 代码示例

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) print("->保存ply...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.ply",mesh) # 读取保存的文件重新展示 print("->重新加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.ply") o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True)

2.4Open3D支持的mesh类型

格式描述
ply一种通用的3D模型文件格式,可以存储点云、网格和曲面等各种类型的3D数据。通常包含顶点信息、面信息、法线信息、纹理坐标信息和颜色信息等。
stl一种简单的3D模型文件格式,通常用于存储三角形网格数据。STL文件包含了每个三角形的三个顶点坐标和法线向量信息。
obj一种通用的3D模型文件格式,它可以存储多边形网格、曲面和点云等各种类型的3D数据。OBJ文件通常包含顶点信息、面信息、纹理坐标信息和法线信息等。
off一种简单的3D模型文件格式,通常用于存储多边形网格数据。OFF文件包含了每个顶点的坐标信息和每个面的顶点索引信息。
gltf一种新兴的3D模型文件格式,它使用JSON作为数据格式,可以存储多种类型的3D数据,例如网格、材质、动画和场景等。
glb一种二进制的gltf格式,它将gltf文件打包成一个二进制文件,可以更快地加载和渲染3D模型。

3 mesh 格式转换

以ply转换为Open3D支持的其他mesh格式为例。

3.1 ply 转 obj

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.2 ply 转 stl

转换之前要确保 ply格式的mesh含有法线,否则需要计算法线后才能执行ply 转 stl操作。

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.3 ply 转 off

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

3.4 ply 转 gltf

# mesh 保存函数 import open3d as o3d print("->加载ply...") mesh = o3d.io.read_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\Armadillo.ply") # 判断mesh文件是否成功读取 if mesh.is_empty(): print("文件读取失败!") else: print("文件读取成功!") # 可视化mesh o3d.visualization.draw_geometries([mesh],window_name='小兔子乖乖',mesh_show_wireframe=True) # 保存为obj print("->保存obj...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.obj",mesh) # 计算mesh顶点法线 mesh.compute_vertex_normals() # 可视化计算顶点法线后的mesh o3d.visualization.draw_geometries([mesh]) # ply 转 stl print("->保存stl...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.stl",mesh) # ply 转 off print("->保存off...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.off",mesh) # ply 转 gltf print("->保存gltf...") o3d.io.write_triangle_mesh(r"H:\HTempWK\temp\open3d\pointdata\SaveArmadillo.gltf",mesh)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询