【问题标题】:How to load textured mesh in trimesh?如何在 trimesh 中加载纹理网格?
【发布时间】:2022-05-21 14:26:58
【问题描述】:

我的最终目的是将带纹理的 obj 模型作为单个 TriangleMesh 对象加载到 trimesh 中,或者将纹理转换为彩色点云,这样我就可以使用存储在 vertex_colors 属性中的颜色。

当我使用trimesh.load 时,它会返回一个包含多个几何图形的场景。当我拨打trimesh.load(force='mesh') 时,所有的纹理都被弄乱了。我还尝试使用 open3d 加载 obj 文件,然后将其转换为 trimesh: tm.Trimesh(np.asarray(mesh.vertices), np.asarray(mesh.triangles), vertex_normals=np.asarray(mesh.vertex_normals)

使用这种方法,我可以获得带有三角形和顶点的 3d 模型,但我不知道如何将 open3d 纹理传递给 trimesh。我知道 trimesh 有 visual 属性来解释纹理,但是我不知道如何从 open3d 纹理构建它。

【问题讨论】:

    标签: python 3d mesh open3d trimesh


    【解决方案1】:
    from trimesh.visual import texture, TextureVisuals
    from trimesh import Trimesh
    
    def get_texture(my_uvs, img):
        # img is PIL Image
        uvs = my_uvs
        material = texture.SimpleMaterial(image=img)    
        texture = TextureVisuals(uv=uvs, image=img, material=material)
    
    my_uvs = [....] # 2d array list
    vertices = [....] # 3d array list
    faces = [....] # indices list
    face_normals = [....] # 3d array list
    texture_visual = get_texture(my_uvs, img)
    mesh = Trimesh(
                vertices=vertices,
                faces=faces,
                face_normals=face_normals,
                visual=texture_visual,
                validate=True,
                process=False
            )
    

    【讨论】:

      猜你喜欢
      • 2020-09-25
      • 2020-11-02
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多