Вручную текстурировать сетку с помощью PyRender или подобной библиотеки Python?
У меня есть частичная сетка комнаты, которую я пытаюсь текстурировать с изображением, полученным с определенной камеры. Я используюpyrender
сделать рендеринг. Если я загружу сетку из.obj
файл, который уже текстурирован, рендеринг отображается с текстурами правильно. Однако, когда я беру нетекстурированную сетку и пытаюсь добавить текстуру отдельного изображения, она отображается сплошным цветом.
Вот код, который у меня есть для взятия вершин / граней сетки и создания текстурированного объекта сетки пирендера:
# Project Vertices into the Image to get UV coordinates
v_s, u_s = camera_projection(vertices, camera_pose, camera_K)
uvs = np.concatenate([u_s[valid_indices, None], v_s[valid_indices, None]], axis=1).astype(int)
# Build the Trimesh texture and Mesh
# image is a (1080, 1080, 3) np.uint8 matrix
material = trimesh.visual.texture.SimpleMaterial(image=image)
color_visuals = trimesh.visual.TextureVisuals(uv=uvs, image=image, material=material)
assert(len(uvs) == len(vertices))
mesh=trimesh.Trimesh(vertices=vertices, faces=faces, visual=color_visuals, validate=True, process=True)
# Convert to trimesh
mesh = pyrender.Mesh.from_trimesh(mesh, smooth=True)
Остальная часть конвейера рендеринга работает правильно, если задана сетка, текстурированная в .obj
файл. Я точно знаю, что все вершины имеютuv
координаты, которые находятся в границах изображения, но не все изображение используется (поскольку сетка имеет некоторые зазоры). Есть идеи о том, что здесь может быть не так, или какие-либо предложения о том, как текстурировать сетку с помощью другой библиотеки?
Спасибо!