วิธีบันทึกฉาก 3 มิติใน Python
Aspose.3D FOSS for Python ให้คุณบันทึก Scene ไปยังรูปแบบผลลัพธ์ที่รองรับทั้งหมดโดยใช้การเรียก Scene.save() เพียงครั้งเดียว การตรวจจับรูปแบบทำโดยอัตโนมัติเมื่อคุณส่งเส้นทางไฟล์; สำหรับตัวเลือกขั้นสูงเช่นการส่งออกแบบไบนารีหรือการฝังเทกซ์เจอร์ คุณต้องจัดหาวัตถุ save-options ที่ระบุรูปแบบเฉพาะ.
คู่มือขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้งแพ็กเกจ
ติดตั้ง Aspose.3D FOSS จาก PyPI. ไม่จำเป็นต้องใช้ไลบรารีเนทีฟ.
pip install aspose-3d-fossรุ่น Python ที่รองรับ: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
ขั้นตอนที่ 2: นำเข้าคลาสที่จำเป็น
อย่างน้อยคุณต้องมี Scene. นำเข้าคลาสตัวส่งออกหรือคลาสตัวเลือกการบันทึกที่เฉพาะเจาะจงของรูปแบบเฉพาะเมื่อคุณต้องการพฤติกรรมที่ไม่ใช่ค่าเริ่มต้น.
from aspose.threed import Sceneสำหรับตัวเลือกที่เฉพาะเจาะจงต่อรูปแบบ:
from aspose.threed.formats.gltf import GltfSaveOptions, GltfExporter
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptionsขั้นตอนที่ 3: โหลดฉาก
โหลดฉากที่มีอยู่จากดิสก์โดยใช้ Scene.from_file(). ไลบรารีตรวจจับรูปแบบแหล่งที่มาจากส่วนขยายไฟล์โดยอัตโนมัติ. หากต้องการสร้างฉากจากศูนย์แทน, ดู วิธีสร้าง Mesh ใน Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")หรืออีกวิธีหนึ่ง ให้เปิดฉากด้วยตัวเลือกที่ชัดเจนผ่าน Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")ขั้นตอนที่ 4: บันทึกเป็น STL
เรียก Scene.save() ด้วยเส้นทาง .stl. โดยค่าเริ่มต้นผลลัพธ์เป็น ASCII STL. เพื่อเขียนเป็น binary STL (ไฟล์ขนาดเล็กกว่า, ไม่มีส่วนหัวที่อ่านได้โดยมนุษย์) ให้ใช้ StlSaveOptions.
# ASCII STL — format detected from the .stl extension
scene.save("output.stl")
# Binary STL — smaller file size
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
stl_format = StlFormat()
options = stl_format.create_save_options()
options.binary_mode = True
scene.save("output_binary.stl", options)ขั้นตอนที่ 5: บันทึกเป็น glTF หรือ GLB
ไฟล์ GLTF 2.0 สามารถส่งออกได้โดยใช้ GltfExporter และ GltfSaveOptions. ตั้งค่า binary_mode = True เพื่อสร้างชุดไบนารี .glb ที่เป็นอิสระ; ตั้งค่า binary_mode = False สำหรับรูปแบบ .gltf ที่ใช้ JSON.
import io
from aspose.threed.formats.gltf import GltfExporter, GltfSaveOptions
# Text glTF
options = GltfSaveOptions()
options.binary_mode = False
options.file_name = "output.gltf"
exporter = GltfExporter()
with open("output.gltf", "wb") as f:
stream = io.BytesIO()
exporter.export(scene, stream, options)
f.write(stream.getvalue())
# Binary GLB
options_glb = GltfSaveOptions()
options_glb.binary_mode = True
options_glb.file_name = "output.glb"
stream_glb = io.BytesIO()
exporter.export(scene, stream_glb, options_glb)
with open("output.glb", "wb") as f:
f.write(stream_glb.getvalue())ขั้นตอนที่ 6: บันทึกเป็น FBX
ฉาก FBX จะถูกส่งออกผ่าน FbxExporter. ใช้ FbxSaveOptions เพื่อเปิดใช้งานการบีบอัดหรือฝังเทกเจอร์ลงในไฟล์ผลลัพธ์.
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
options = FbxSaveOptions()
options.enable_compression = True
options.embed_textures = False # keep textures as separate files
exporter = FbxExporter()
exporter.save(scene, "output.fbx", options)ขั้นตอนที่ 7: บันทึกเป็น OBJ หรือ Collada (DAE)
สำหรับ OBJ และ Collada ให้ส่งเส้นทางไฟล์โดยตรงไปยัง Scene.save(). ไลบรารีจะตรวจจับรูปแบบจากส่วนขยาย.
# OBJ — format auto-detected from .obj extension
scene.save("output.obj")
# Collada DAE — with material and coordinate-system options
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions
options = ColladaSaveOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.indented = True
exporter = ColladaExporter()
exporter.export(scene, open("output.dae", "wb"), options)ปัญหาทั่วไปและการแก้ไข
ไฟล์ผลลัพธ์ว่างหลังจาก scene.save()
โดยทั่วไปหมายความว่าโหนดรากของฉากไม่มีโหนดลูกที่มีเรขาคณิต ตรวจสอบว่าแต่ละโหนดเมชได้ถูกแนบไปยัง scene.root_node ก่อนเรียก save ตรวจสอบ len(scene.root_node.child_nodes) หลังจากสร้างฉาก
AttributeError เมื่อสร้างเรขาคณิตเมช
คลาส Mesh จะเก็บเวอร์เท็กซ์เป็นรายการจุดควบคุมภายใน สำหรับรูปแบบการสร้างเมชโดยละเอียด โปรดดูบทความ วิธีสร้างเมชใน Python ซึ่งครอบคลุมการสร้างโพลิกอน, องค์ประกอบเวอร์เท็กซ์, และข้อมูล UV.
ผลลัพธ์ GLB มีขนาดใหญ่กว่าที่คาดไว้
Binary GLB รวมข้อมูลเรขาคณิตและเทกเจอร์ทั้งหมดไว้ในไฟล์เดียว หาก GltfSaveOptions.flip_tex_coord_v ถูกตั้งค่าเป็น True จะมีการเพิ่มขั้นตอนการพลิกพิกัดเพิ่มเติม ตั้งค่าเป็น False หากคุณไม่ต้องการการพลิกเทกเจอร์ตามแกน V.
การนำเข้า/ส่งออก FBX รอบรอบทำให้วัสดุหาย
FBX material export is controlled by FbxSaveOptions.export_legacy_material_properties. Set this to True to write standard FBX material blocks that third-party tools can read.
Collada DAE ไม่ได้รวมวัสดุ
ตั้งค่า ColladaSaveOptions.enable_materials = True (ค่าเริ่มต้นคือ False) ก่อนทำการส่งออก.
คำถามที่พบบ่อย
รูปแบบใดบ้างที่ Aspose.3D FOSS for Python สามารถส่งออกได้?
ไลบรารีรองรับการส่งออกเป็น: STL, glTF 2.0 (ข้อความและไบนารี GLB), FBX, OBJ, Collada (DAE) และ 3MF. การตรวจจับรูปแบบทำโดยอัตโนมัติเมื่อคุณส่งสตริงเส้นทางไฟล์ไปยัง Scene.save(); ไลบรารีจะอ่านส่วนขยายเพื่อเลือกตัวส่งออกที่ถูกต้อง.
มี API การส่งออกแบบสตรีมมิ่งที่หลีกเลี่ยงการเขียนลงดิสก์หรือไม่?
ใช่. GltfExporter.export(scene, stream, options) เขียนไปยัง io.BytesIO หรืออ็อบเจ็กต์ที่คล้ายไฟล์ใดก็ได้ คุณสามารถส่งบัฟเฟอร์ในหน่วยความจำโดยตรงไปยังการตอบสนองเว็บหรือการประมวลผลต่อไปโดยไม่ต้องสัมผัสระบบไฟล์.
ฉันจะแปลงฉากจากรูปแบบหนึ่งเป็นอีกรูปแบบหนึ่งได้อย่างไร?
โหลดฉากด้วย Scene.from_file("input.fbx") และบันทึกด้วย scene.save("output.gltf"). ไลบรารีจัดการการแปลงในหน่วยความจำ; ไม่จำเป็นต้องใช้ไฟล์กลาง.
ฉันสามารถบันทึกซับซีนหลายอันลงในไฟล์แยกต่างหากได้หรือไม่?
เข้าถึง scene.sub_scenes เพื่อวนซ้ำแต่ละซับซีน, สร้างอ็อบเจ็กต์ Scene ใหม่, แนบโหนดที่เกี่ยวข้อง, และเรียก save() สำหรับแต่ละอัน.
Scene.save() เขียนทับไฟล์ที่มีอยู่โดยเงียบหรือไม่?
ใช่ ไลบรารีจะไม่เกิดข้อผิดพลาดหากไฟล์เป้าหมายมีอยู่แล้ว; มันจะเขียนทับไฟล์นั้น เพิ่มการตรวจสอบการมีไฟล์อยู่ในโค้ดของคุณหากคุณต้องการป้องกันการเขียนทับโดยไม่ได้ตั้งใจ.