コード例 #1
0
    def test_extend(self):
        B = 5
        mesh = TestMeshes.init_mesh(B, 30, 50)
        V = mesh._V
        num_faces = mesh.num_faces_per_mesh()
        num_verts = mesh.num_verts_per_mesh()
        faces_uvs_list = [
            torch.randint(size=(f, 3), low=0, high=V) for f in num_faces
        ]
        verts_uvs_list = [torch.rand(v, 2) for v in num_verts]
        tex_uv = TexturesUV(
            maps=torch.ones((B, 16, 16, 3)),
            faces_uvs=faces_uvs_list,
            verts_uvs=verts_uvs_list,
        )
        tex_mesh = Meshes(verts=mesh.verts_list(),
                          faces=mesh.faces_list(),
                          textures=tex_uv)
        N = 2
        new_mesh = tex_mesh.extend(N)

        self.assertEqual(len(tex_mesh) * N, len(new_mesh))

        tex_init = tex_mesh.textures
        new_tex = new_mesh.textures

        for i in range(len(tex_mesh)):
            for n in range(N):
                self.assertClose(tex_init.verts_uvs_list()[i],
                                 new_tex.verts_uvs_list()[i * N + n])
                self.assertClose(tex_init.faces_uvs_list()[i],
                                 new_tex.faces_uvs_list()[i * N + n])
                self.assertClose(tex_init.maps_padded()[i, ...],
                                 new_tex.maps_padded()[i * N + n])
                self.assertClose(
                    tex_init._num_faces_per_mesh[i],
                    new_tex._num_faces_per_mesh[i * N + n],
                )

        self.assertAllSeparate([
            tex_init.faces_uvs_padded(),
            new_tex.faces_uvs_padded(),
            tex_init.faces_uvs_packed(),
            new_tex.faces_uvs_packed(),
            tex_init.verts_uvs_padded(),
            new_tex.verts_uvs_padded(),
            tex_init.verts_uvs_packed(),
            new_tex.verts_uvs_packed(),
            tex_init.maps_padded(),
            new_tex.maps_padded(),
        ])

        with self.assertRaises(ValueError):
            tex_mesh.extend(N=-1)
コード例 #2
0
 def test_clone(self):
     tex = TexturesUV(
         maps=torch.ones((5, 16, 16, 3)),
         faces_uvs=torch.rand(size=(5, 10, 3)),
         verts_uvs=torch.rand(size=(5, 15, 2)),
     )
     tex_cloned = tex.clone()
     self.assertSeparate(tex._faces_uvs_padded,
                         tex_cloned._faces_uvs_padded)
     self.assertSeparate(tex._verts_uvs_padded,
                         tex_cloned._verts_uvs_padded)
     self.assertSeparate(tex._maps_padded, tex_cloned._maps_padded)
     self.assertSeparate(tex.valid, tex_cloned.valid)