You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:18:30