การส่งออก mesh ไม่สามารถสร้างไฟล์ ply-file ที่อ่านได้

ฉันเขียนสคริปต์เล็กๆ น้อยๆ โดยมีหน้าที่โหลด mesh (ply) จากนั้นจึงใช้ตัวกรองบางตัว และสุดท้ายก็ส่งออกข้อมูลทั้งหมดกลับเป็น ply

จนถึงตอนนี้ดีมาก แต่ไฟล์ ply-file ที่ได้ออกมาไม่สามารถอ่านได้ หากฉันพยายามเปิดใน MeshLab มันบอกว่า: เผชิญกับจุดยอดมากกว่า 3 จุด

นี่คือส่วนรหัสที่เกี่ยวข้องกับ pymeshlab (ล้างแล้ว):

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')

ฉันพลาดอะไรบางอย่างไปหรือเปล่า? จริงๆ แล้วไม่มีข้อความแสดงข้อผิดพลาดในการรันสคริปต์นี้ ฉันยังพยายามใช้พารามิเตอร์บางตัวสำหรับตัวกรองการบันทึก แต่ก็ไม่ได้เปลี่ยนแปลงอะไรเลย

ฉันจะทำให้ถูกต้องได้อย่างไร?


person Coder1234    schedule 22.01.2021    source แหล่งที่มา
comment
คุณสามารถเพิ่มบรรทัด ms.set_versbosity(True) ไปที่จุดเริ่มต้นของสคริปต์เพื่อดูว่า meshlab เขียนข้อผิดพลาดหรือไม่   -  person Rockcat    schedule 22.01.2021
comment
เขาบอกว่าเขาไม่มีพื้นผิวของไฟล์เร่ พื้นผิวมีอยู่ในไดเร็กทอรีเดียวกันกับ ply และสคริปต์ของฉันก็คัดลอกมันลงในไดเร็กทอรี meshlab เช่นกัน (นั่นคือสิ่งที่ ML ค้นหาเมื่อฉันทำด้วยมือ)   -  person Coder1234    schedule 25.01.2021
comment
โอเค ฉันเปลี่ยนพารามิเตอร์ของ save_current_mesh() จาก 'binary=True' เป็น 'binary=False' และตอนนี้ก็สร้าง mesh ที่ถูกต้องแล้ว   -  person Coder1234    schedule 25.01.2021


คำตอบ (1)


ดูเหมือนว่าจะเป็นข้อบกพร่องในตัวส่งออก .ply ที่ใช้ภายในในเมธอด ms.save_current_mesh()

วิธีการนี้พยายามบันทึกข้อมูลทั้งหมดที่จัดเก็บไว้ใน mesh ซึ่ง ณ จุดนี้คือ texture_per_vertex, texture_per_wedge และ color_per_vertex และมีบางอย่างผิดปกติเกิดขึ้น

ฉันได้จัดการวิธีแก้ปัญหาด้วยการปิดใช้งานการบันทึก texture_per_wedge (ซึ่งจำเป็นสำหรับตัวกรอง 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 )

รายการอาร์กิวเมนต์ที่ถูกต้องสำหรับ save_current_mesh สามารถอ่านได้ที่นี่ https://pymeshlab.readthedocs.io/en/latest/filter_list.html#save-parameters

โปรดทราบว่า save_vertex_coord หมายถึง พิกัดพื้นผิวต่อจุดยอด!!!

person Rockcat    schedule 25.01.2021