כיצד לשמור סצנות תלת‑ממד בפייתון
Aspose.3D FOSS for 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. ייבא את המייצא הספציפי לפורמט או את מחלקת אפשרויות השמירה רק כאשר אתה צריך התנהגות שאינה ברירת מחדל.
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(). הספרייה מזהה את פורמט המקור אוטומטית מהרחבת הקובץ. כדי לבנות סצנה מאפס במקום זאת, ראה איך לבנות רשת בפייתון.
# 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. כדי לכתוב 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 מאחסנת קודקודים כרשימת נקודות בקרה פנימית. עבור תבניות בניית רשת מפורטות, עיינו במאמר איך לבנות רשת בפייתון שמכסה יצירת פוליגונים, אלמנטים של קודקוד, ונתוני UV.
פלט GLB גדול יותר מהצפוי
Binary GLB משלב את כל נתוני הגאומטריה והמרקם. אם GltfSaveOptions.flip_tex_coord_v מוגדר לTrue, תתווסף מעבר הפיכת קואורדינטות נוסף. הגדר אותו לFalse אם אינך זקוק להפיכת מרקם בציר V.
יבוא/ייצוא FBX במעגל חוזר מאבד חומרים
ייצוא חומרים של FBX נשלט על ידי FbxSaveOptions.export_legacy_material_properties. הגדר זאת ל-True כדי לכתוב בלוקי חומרים סטנדרטיים של FBX שכלים של צד שלישי יכולים לקרוא.
Collada DAE אינו כולל חומרים
הגדר ColladaSaveOptions.enable_materials = True (זה False כברירת מחדל) לפני הייצוא.
שאלות נפוצות
אילו פורמטים יכול Aspose.3D FOSS עבור 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() משכתב קבצים קיימים באופן שקט?
כן. הספרייה אינה זורקת שגיאה אם קובץ היעד כבר קיים; היא משכתבת אותו. הוסף בדיקת קיום קובץ בקוד שלך אם אתה צריך להגן מפני שכתוב בטעות.