วิธีการบันทึกภาพ 3D ใน Python
Aspose.3D FOSS สําหรับ Python ช่วยให้คุณบันทึกการใช้งาน Scene สําหรับรูปแบบการส่งออกที่ได้รับการสนับสนุนใด ๆ โดยใช้แบบเดียว Scene.save() การตรวจจับรูปแบบจะถูกเปิดโดยอัตโนมัติเมื่อคุณผ่านเส้นทางไฟล์ สําหรับตัวเลือกขั้นสูงเช่นการส่งออกไบนาหรือการรวมเนื้อหาคุณจะจัดหาวัตถุของตัวเลือกรูปแบบที่กําหนดเอง.
คู่มือขั้นตอน
ขั้นตอนที่ 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.หมายเลขรุ่น: Import the format-specific exporter or save-options class only when you need non-default behavior.
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(). ห้องสมุดตรวจจับรูปแบบแหล่งข้อมูลโดยอัตโนมัติจากไฟล์ขยาย เพื่อสร้างภาพถ่ายจาก scratch แทนดู: วิธีการสร้าง 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() ด้วย A .stl โดยเริ่มต้นการส่งออกคือ ASCII 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 สําหรับ JSON-based .gltf รูปแบบ.
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
ไม่ดําเนินการ:
FbxExporter.save()และFbxExporter.save_to_stream()การเพิ่มขึ้นNotImplementedErrorในรุ่นปัจจุบัน FBX การส่งออกไม่ได้อยู่ใน Aspose.3D FOSS สําหรับ Python ในขณะนี้.ใช้รูปแบบ GLB, OBJ, STL หรือ Collada (DAE) ที่แทน ดูขั้นตอน 4, 5 และ 7 สําหรับตัวเลือกการส่งออกที่ทํางาน.
# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options) # raises NotImplementedError
# Use a supported format instead:
scene.save("output.glb") # binary GLB — recommended
scene.save("output.obj") # Wavefront OBJ
scene.save("output.stl") # STLขั้นตอน 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 ชั้นจัดเก็บแนวตั้งเป็นรายการจุดควบคุมภายใน สําหรับรูปแบบการก่อสร้างแบบรายละเอียดของเมซะอี้ให้คําแนะนําเกี่ยวกับ วิธีการสร้าง Mesh ใน Python บทความที่ครอบคลุมการสร้างโพลีกอนองค์ประกอบแนวตั้งและข้อมูล UV.
ผลผลิต GLB ใหญ่กว่าที่คาดหวัง GLB บินเนียร์รวมข้อมูลภูมิศาสตร์และพื้นผิวทั้งหมด หากคุณต้องการ GltfSaveOptions.flip_tex_coord_v ตั้งไว้ใน True, มีการเข้าสู่ระบบแบบ Flip-Coordinate ที่เพิ่มขึ้น. ปรับให้ False ถ้าคุณไม่ต้องการ V-axis texture flipping.
FBX การส่งออกไม่ได้อยู่ในเวอร์ชันปัจจุบัน FbxExporter.save() การเพิ่มขึ้น NotImplementedError. FBX การนําเข้า (โหลด .fbx ไฟล์) จะทํางานปกติ แต่การส่งออกไปยัง FBX ไม่มีการดําเนินการ แปลงไป GLB, OBJ, STL หรือ Collada แทนนั้น.
Collada DAE ไม่รวมวัสดุ ชุด ColladaSaveOptions.enable_materials = True (มันเป็น False โดย default) ก่อนที่จะส่งออก.
คําถามที่พบบ่อย
รูปแบบใดสามารถนําเข้า Aspose.3D FOSS สําหรับ Python?
บีบอิสระสนับสนุนการส่งออกไปยัง: STL, glTF 2.0 (ข้อความและไบนาร GLB), OBJ และ Collada (DAE) การตรวจจับรูปแบบจะถูกเปิดโดยอัตโนมัติเมื่อคุณผ่านเส้นทางไฟล์ไปยัง Scene.save(); บิตยสารอ่านการขยายเพื่อเลือกผู้ส่งออกที่เหมาะสม.
บันทึก: FBX การส่งออกเป็น ไม่ดําเนินการ ในช่วงเวลาปัจจุบัน -
FbxExporter.save()การเพิ่มขึ้นNotImplementedError.ใช้ GLB, OBJ, STL หรือ Collada แทน.
มี API การส่งออกแบบสตรีมมิ่งที่หลีกเลี่ยงการเขียนไปยังดิสก์หรือไม่?
ใช่. GltfExporter.export(scene, stream, options) เขียนไปยังแต่ละคน io.BytesIO หรือไฟล์เป็นวัตถุ คุณสามารถส่งกล่องในหน่วยความจําได้โดยตรงไปยังการตอบสนองเว็บหรือการประมวลผลเพิ่มเติมโดยไม่ต้องสัมผัสกับระบบไฟล์.
ฉันจะแปลงภาพยนตร์จากรูปแบบหนึ่งไปยังรูปแบบอื่นได้อย่างไร?
ดาวน์โหลดสถานการณ์ด้วย Scene.from_file("input.fbx") และบันทึกด้วย scene.save("output.gltf"). ห้องสมุดจัดการการแปลงในหน่วยความจํา ไม่จําเป็นต้องมีไฟล์กลาง.
ฉันสามารถบันทึกหลายช่องภายใต้ไฟล์แยกได้หรือไม่?
การเข้าถึง scene.sub_scenes เพื่อ iterate บนแต่ละ subscene สร้างใหม่ Scene วัตถุ, เชื่อมต่อคิวส์ที่เกี่ยวข้องและโทรศัพท์ save() ในแต่ละ.
หมายเลขรุ่น: Scene.save() การเขียนไฟล์ที่มีอยู่อย่างเงียบสงบหรือไม่?
ใช่. ห้องสมุดไม่ทําให้เกิดข้อผิดพลาดถ้าไฟล์เป้าหมายอยู่แล้ว; มันเขียนเกินไป เพิ่มการตรวจสอบความปรากฏตัวของไฟล์ในรหัสของคุณหากคุณต้องการป้องกันจากการเขียนมากกว่าที่สุ่ม.