Open3D如何为三角网格设置逐三角形颜色?
解决Open3D三角网格逐三角形颜色设置问题
错误原因
你代码里的核心问题是错误操作了mesh.triangles属性:mesh.triangles是专门存储三角形顶点索引的Vector3iVector,不支持通过["colors"]键赋值颜色。Open3D官方提供的逐三角形颜色属性是TriangleMesh.triangle_colors,而非你使用的方式。
另外,Open3D的颜色值要求是0.0到1.0之间的浮点型,而非整数类型,这也是你尝试Vector3iVector无效的原因之一。
修正后的代码
import open3d as o3d import numpy as np def face_color_test(): mesh = o3d.geometry.TriangleMesh.create_octahedron() # 颜色值改为0-1的浮点型,匹配Open3D的颜色要求 rgb = [[0.0,0.0,0.0],[0.0,0.0,1.0],[0.0,1.0,0.0],[0.0,1.0,1.0], [1.0,0.0,0.0],[1.0,0.0,1.0],[1.0,1.0,0.0],[1.0,1.0,1.0]] # 使用Vector3dVector存储浮点颜色值 face_colors = o3d.utility.Vector3dVector(np.array(rgb, dtype=np.float64)) # 正确赋值给triangle_colors属性 mesh.triangle_colors = face_colors mesh.compute_vertex_normals() # 可视化部分保持不变 vis = o3d.visualization.Visualizer() vis.create_window() vis.add_geometry(mesh) vis.run() vis.destroy_window()
关键修改点
- 替换赋值目标:将
mesh.triangles["colors"]改为mesh.triangle_colors - 调整颜色数据类型:使用浮点型(
float64或float32)存储0-1范围内的颜色值,对应Vector3dVector或Vector3fVector - 确保Open3D版本≥0.15.0:逐三角形颜色支持是在2021年12月的版本中添加的,旧版本可能没有
triangle_colors属性
额外说明
如果你的颜色数据原本是0-255的整数范围,只需除以255转换为0-1的浮点值即可,例如:
rgb_int = [[0,0,0],[0,0,255],[0,255,0],...] rgb_float = np.array(rgb_int, dtype=np.float64) / 255.0 face_colors = o3d.utility.Vector3dVector(rgb_float)
内容的提问来源于stack exchange,提问作者Craig Reynolds
相关产品推荐
相关产品推荐

