对于 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(...)
,但得到了同样的错误.)