一、函数解析
1、
2、
3、
4、
5、
6、
二、示例代码
1、mesh
Open3D有一个用于三维三角形网格的数据结构,称为
1 2 3 4 5 6 7 | print("Testing mesh in Open3D...") mesh = o3dtut.get_knot_mesh() print(mesh) print('Vertices:') print(np.asarray(mesh.vertices))# 每个点的坐标xyz print('Triangles:') print(np.asarray(mesh.triangles))# 每个面的三个点的索引 |
这个
2、可视化mesh
1 2 3 4 5 | print("Try to render a mesh with normals (exist: " + str(mesh.has_vertex_normals()) + ") and colors (exist: " + str(mesh.has_vertex_colors()) + ")") o3d.visualization.draw_geometries([mesh]) print("A mesh with no normals and no colors does not look good.") |

可以旋转和移动网格,但是网格被涂成均匀的灰色,看起来不像“ 3d”。原因是当前网格没有顶点或面的法线。因此,使用统一的颜色底纹代替更复杂的Phong底纹。
3、计算法线
1 2 3 4 | print("Computing normal and rendering it.") mesh.compute_vertex_normals() print(np.asarray(mesh.triangle_normals)) o3d.visualization.draw_geometries([mesh]) |
4、mesh上色
1 2 3 | print("Painting the mesh") mesh.paint_uniform_color([1, 0.706, 0]) o3d.visualization.draw_geometries([mesh]) |
三、完整代码展示
实现mesh的读写颜色渲染等操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import open3d as o3d import numpy as np print("Testing mesh in Open3D...") mesh = o3d.io.read_triangle_mesh("UV.ply") print(mesh) # 打印点数和三角面数 print('Vertices:') print(np.asarray(mesh.vertices))# 输出每个顶点的坐标xyz print('Triangles:') print(np.asarray(mesh.triangles))# 每个面的三个点的索引 #o3d.io.write_triangle_mesh("copy_of_knot.ply", mesh) # 保存mesh print("Computing normal and rendering it.") mesh.compute_vertex_normals() print(np.asarray(mesh.triangle_normals)) mesh.paint_uniform_color([1, 0.7, 0]) o3d.visualization.draw_geometries([mesh]) |
四、结果展示
