Open3d: color per triangle?



对于Open3d中类似图表的渲染,我想使用每个三角形的颜色。Open3d通常插值每个顶点的颜色(通过open3d.geometry.TriangleMesh.vertex_colors)。但这一评论表明,到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问题中建议的o3d.core.Tensor(...),但得到了同样的错误。)

这里的问题是Open3D的"遗留"部分和"张量"部分之间的区别在很大程度上没有记录。

每个三角形颜色的支持(以及许多其他特性)都在open3d.t.g orgeometry中。TriangleMesh butnot在open3d.geometry.TriangleMesh中。关键是微妙的.t.

在Open3D issue #6060中有一些关于这个区别的额外描述

相关内容

最新更新