在Open3D的TetraMesh
数据结构中,vertex_colors
是一个可编辑的属性,可以用来存储顶点的颜色信息。vertex_colors
的数据格式为open3d.core.Tensor
,其形状是(N, 3),其中N为顶点数,3代表RGB三个通道的值。每个顶点的颜色可以从vertex_colors
中按索引取出。
如果在创建TetraMesh
时希望预先设定所有顶点的颜色信息,可以通过以下方式创建vertex_colors
:
import open3d as o3d
import numpy as np
# 创建TetraMesh的点坐标和四面体索引
points = np.array([[0,0,0], [1,0,0], [0,1,0], [0,0,1]])
tetras = np.array([[0, 1, 2, 3]])
# 创建所有顶点颜色为红色(1,0,0)的vertex_colors
colors = np.tile([1,0,0], (points.shape[0], 1))
vertex_colors = o3d.core.Tensor(colors, dtype=o3d.core.Dtype.Float32)
mesh = o3d.geometry.TetraMesh(points=o3d.utility.Vector3dVector(points),
tetras=o3d.utility.Vector4iVector(tetras),
vertex_colors=vertex_colors)
可以通过以下方式访问和编辑vertex_colors
:
# 访问第0个顶点的颜色
color_0 = mesh.vertex_colors[kernel._toInt64Tensor([0])].numpy()
print(color_0)
# 编辑第0个顶点的颜色为黄色(1,1,0)
mesh.vertex_colors[kernel._toInt64Tensor([0])] = o3d.core.Tensor([1,1,0], dtype=o3d.core.Dtype.Float32)
也可以对vertex_colors
进行批量编辑,例如将所有绿色(0,1,0)的点设为蓝色(0,0,1):
# 将所有绿色点设为蓝色
colors_new = np.where(colors==[0,1,0], [0,0,1], colors)
mesh.vertex_colors = o3d.core.Tensor(colors_new, dtype=o3d.core.Dtype.Float32)
在可视化TetraMesh
时,可以使用open3d.visualization.draw_geometries
函数,并通过参数point_show_normal=True
启用顶点颜色的显示:
o3d.visualization.draw_geometries([mesh], point_show_normal=True)
上述示例中,左侧为所有顶点颜色均为红色的TetraMesh
,右侧为所有绿色点已被修改为蓝色的TetraMesh
。