作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 python Open3d 处理三角形网格,我想向我的网格添加纹理映射(我没有在文档中找到它),这是一个带有简单立方体网格的示例代码:
import numpy as np
import open3d as o3d
vert=[[0,0,0],[0,1,0],[1,1,0],[1,0,0],
[0,0,1],[0,1,1],[1,1,1],[1,0,1]]
faces=[[0, 1, 2], [0, 2, 3], [6, 5, 4],
[7, 6, 4], [5, 1, 0], [0, 4, 5], [3, 2, 6],
[6, 7, 3], [0, 3, 7], [0, 7, 4], [1, 5, 6],
[1, 6, 2]]
m=o3d.geometry.TriangleMesh(o3d.open3d_pybind.utility.Vector3dVector(vert),
o3d.open3d_pybind.utility.Vector3iVector(faces))
m.compute_vertex_normals()
o3d.visualization.draw_geometries([m])
我可以看到立方体: cube mesh
现在我尝试添加纹理:
text=cv2.imread('~/Downloads/cupe_uv.png')
plt.imshow(text)
这是纹理图像: texture image of a cube
DX,DY=0.5/2,0.66/2
v_uv=[[DX,DY],[DX,2*DY],[2*DX,2*DY],[2*DX,DY],
[0,DX],[DX,1],[3*DX,2*DY],[3*DX,DY]]
v_uv=np.asarray(v_uv)
v_uv=np.concatenate((v_uv,v_uv,v_uv),axis=0)
m.triangle_uvs = o3d.open3d_pybind.utility.Vector2dVector(v_uv)
m.textures=[o3d.geometry.Image(text)]
o3d.visualization.draw_geometries([m])
我知道我没有设置 uv 坐标来显示立方体的所有颜色(但应该有一些颜色......)。无论如何,网格仍然没有纹理(与开始时相同)。
最佳答案
mesh.triangle_uvs
是形状为 (3 * num_triangles, 2)
的数组,而不是 (3 * num_vertices, 2)
。
试试这个:
v_uv = np.random.rand(len(faces) * 3, 2)
m.triangle_uvs = o3d.open3d_pybind.utility.Vector2dVector(v_uv)
对了,你的Open3D版本好像很旧。
Open3d 0.10.0
已经发布并添加了许多新功能。
您可能想尝试新版本 :)
关于python - 如何在 python Open3d 中向网格添加纹理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62879709/
我是一名优秀的程序员,十分优秀!