Ekspor mesh gagal membuat file lapis yang dapat dibaca

Saya menulis sebuah skrip kecil, yang memiliki tugas memuat mesh (lapisan), kemudian menerapkan beberapa filter dan akhirnya mengekspor semuanya kembali sebagai lapisan.

Sejauh ini bagus. Tetapi file ply yang dihasilkan tidak dapat dibaca. Kalau saya coba buka di MeshLab, tertulis: Wajah dengan lebih dari 3 simpul

berikut adalah bagian kode yang berhubungan dengan pymeshlab (dibersihkan):

import pymeshlab as ml
ms = ml.MeshSet()
ms.load_new_mesh(path + mesh_name)
ms.apply_filter('convert_pervertex_uv_into_perwedge_uv')
ms.apply_filter('transfer_color_texture_to_vertex')
ms.save_current_mesh(path + 'AutomatedGeneration3.ply')

Apakah saya melewatkan sesuatu? Sebenarnya tidak ada pesan error dalam mengeksekusi script ini. Saya juga mencoba menggunakan beberapa parameter untuk filter penyimpanan tetapi tidak mengubah apa pun.

Bagaimana cara melakukannya dengan benar?


person Coder1234    schedule 22.01.2021    source sumber
comment
Bisakah Anda menambahkan baris ms.set_versbosity(True) ke awal skrip untuk melihat apakah meshlab menulis kesalahan?   -  person Rockcat    schedule 22.01.2021
comment
Dia bilang dia kehilangan tekstur file ply. Teksturnya ada di direktori yang sama dengan ply dan skrip saya juga menyalinnya ke direktori meshlab (di situlah ML mencarinya ketika saya melakukannya dengan tangan)   -  person Coder1234    schedule 25.01.2021
comment
oke, saya mengubah parameter save_current_mesh() dari 'binary=True' menjadi 'binary=False' dan sekarang menghasilkan mesh yang benar.   -  person Coder1234    schedule 25.01.2021


Jawaban (1)


Tampaknya ini merupakan bug pada eksportir .ply yang digunakan secara internal dalam metode ms.save_current_mesh().

Metode ini mencoba menyimpan semua informasi yang disimpan dalam mesh, yang pada saat ini adalah texture_per_vertex, texture_per_wedge dan color_per_vertex, dan ada yang tidak beres di sana.

Saya telah berhasil mengatasinya dengan menonaktifkan penyimpanan texture_per_wedge (yang diperlukan hanya untuk filter transfer_color_texture_to_vertex.

import pymeshlab as ml
ms = ml.MeshSet()
#Load a mesh with texture per wedge
ms.load_new_mesh('input_pervertex_uv.ply')
m = ms.current_mesh()

print("Input mesh has", m.vertex_number(), 'vertex and', m.face_number(), 'faces' )

ms.apply_filter('convert_pervertex_uv_into_perwedge_uv')
ms.apply_filter('transfer_color_texture_to_vertex')

#Export mesh with color_per_vertex but without texture
ms.save_current_mesh('output.ply',save_wedge_texcoord=False,save_vertex_coord=False )

Daftar argumen yang valid untuk save_current_mesh dapat dibaca di sini https://pymeshlab.readthedocs.io/en/latest/filter_list.html#save-parameters

Perlu diketahui bahwa save_vertex_coord mengacu pada Koordinat tekstur per titik!!!

person Rockcat    schedule 25.01.2021