Open3d:每个三角形的颜色?

问题描述 投票:0回答:0

对于 Open3d 中类似图表的渲染,我想使用每个三角形的颜色。 Open3d 通常对每个顶点颜色进行插值(通过

open3d.geometry.TriangleMesh.vertex_colors
)。但是这个 comment 表明在 2021 年 12 月之前添加了对每个三角形的支持。如果是这样,我将无法运行它。这段 Python 测试代码:

import open3d as o3d
import numpy as np

def face_color_test():
    mesh = o3d.geometry.TriangleMesh.create_octahedron()
    rgb = [[0,0,0],[0,0,1],[0,1,0],[0,1,1],[1,0,0],[1,0,1],[1,1,0],[1,1,1]]
    face_colors = o3d.utility.Vector3iVector(np.array(rgb, np.int32))
    mesh.triangles["colors"] = face_colors
    mesh.compute_vertex_normals()

    # Create a visualization window, add mesh, render.
    vis = o3d.visualization.Visualizer()
    vis.create_window()
    vis.add_geometry(mesh)
    vis.run()
    vis.destroy_window()

mesh.triangles["colors"] = face_colors
上出现错误:

Traceback (most recent call last):
  File "/Users/cwr/Documents/code/flock/flock.py", line 158, in <module>
    face_color_test()
  File "/Users/cwr/Documents/code/flock/flock.py", line 133, in face_color_test
    mesh.triangles["colors"] = face_colors
TypeError: __setitem__(): incompatible function arguments. The following argument types are supported:
    1. (self: open3d.cpu.pybind.utility.Vector3iVector, arg0: int, arg1: numpy.ndarray[numpy.int32[3, 1]]) -> None
    2. (self: open3d.cpu.pybind.utility.Vector3iVector, arg0: slice, arg1: open3d.cpu.pybind.utility.Vector3iVector) -> None

我正在使用该 GitHub 问题上讨论的解决方法之一。但如果有直接应用面部颜色的受支持方法,我更愿意使用它。有什么建议吗?

(我希望颜色数据是浮点数的 rgb 三元组,但根据错误消息将其从

Vector3dVector
更改为
Vector3iVector
。我也按照 GitHub Issue 中的建议尝试了
o3d.core.Tensor(...)
,但得到了同样的错误.)

rendering mesh open3d
© www.soinside.com 2019 - 2024. All rights reserved.