vertex_normals 是 open3d.geometry.MeshBase 类的一个方法,用于计算网格的每个顶点的法向量。
open3d.geometry.MeshBase.vertex_normals(self, search_param: open3d.geometry.KDTreeSearchParamHybrid,
normalized: bool = True,
allow_duplicates: bool = False,
fast_normal_computation: bool = False) -> np.ndarray
search_param:用于查询邻近的 KDTree 参数对象,类型为 open3d.geometry.KDTreeSearchParamHybrid。normalized:指定法向量是否应该被归一化,类型为 bool,默认为 True。allow_duplicates:是否允许顶点共享法向量,类型为 bool,默认为 False。fast_normal_computation:是否使用较快但可能不够准确的法向量计算方法,类型为 bool,默认为 False。类型为 np.ndarray,包含三个浮点数域的值,分别代表每个顶点的 x、y、z 坐标的法向量。数组的大小为 (n, 3),其中 n 是顶点的数量。
import open3d as o3d
import numpy as np
# 创建一个三角形网格
vertices = np.array([[0, 0, 0], [1, 0, 0], [0, 1, 0]], dtype=np.float64)
triangles = np.array([[0, 1, 2]], dtype=np.int32)
mesh = o3d.geometry.TriangleMesh(o3d.utility.Vector3dVector(vertices), o3d.utility.Vector3iVector(triangles))
# 计算每个顶点的法向量
normals = mesh.vertex_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1))
# 显示结果
mesh.vertex_colors = o3d.utility.Vector3dVector(normals)
o3d.visualization.draw_geometries([mesh])
vertex_normals 方法只能应用于 open3d.geometry.MeshBase 或其派生类的对象。vertex_normals 时设置合适的 KDTreeSearchParamHybrid 参数对象。