מבוא

3D content rarely stays in a single format for its entire lifetime. A model may originate as an OBJ file exported from a modelling application, travel through a 3D printing pipeline as STL, appear in a web application as glTF, and end up in an additive manufacturing tool as 3MF. Each format serves a different audience and a different downstream tool, and conversion between them is something most 3D pipelines need to handle reliably.

Python הוא התאמה טבעית לעבודה זו: סקריפטים של שורת פקודה שבירים מדי, ושילובי כלי DCC (digital content creation) מלאים כבדים מדי לעיבוד באצ’ים. מה שאתה צריך הוא ספרייה שיכולה לטעון כל אחד מהפורמטים האלה, לספק גרף סצנה עקבי, ולכתוב חזרה לכל פורמט יעד מבלי לדרוש GUI או מנהל גרפיקה.

Aspose.3D קוד פתוח חופשי עבור Python (aspose-3d-foss, רישיון MIT) ממלא פער זה. מדריך זה מציג את מסלולי ההמרה הנפוצים ביותר עם דוגמאות קוד שלמות שניתן להריץ.


אילו פורמטים Aspose.3D FOSS תומך?

פורמטExtension(s)טעינהשמירהמקרה שימוש נפוץ
Wavefront OBJ.objכןכןהחלפה מכלי מודלינג; .mtl קבצי חומר נתמכים
STL.stlכןכן3D printing, CAD export; binary and ASCII variants
glTF 2.0 / GLB.gltf, .glbכןכןצופים באינטרנט, מנועי משחק; GLB הוא המגוון הבינארי העצמאי
COLLADA.daeכןכןייבוא מכלי אנימציה; ColladaSaveOptions תומך ביצוא
3MF.3mfכןכןייצור תוספתי, מטא‑נתוני הדפסה עשירים יותר מ‑STL

זיהוי הפורמט הוא אוטומטי מהרחבת הקובץ. מחלקות אפשרויות ספציפיות לפורמט (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) זמינות כאשר אתה צריך שליטה מדוקדקת.

הערה על FBX: הספרייה כוללת טוקניזר חלקי של FBX לייבוא. FBX אינו מומלץ לתהליכי המרה בייצור בגרסה זו; השתמש ב‑OBJ או glTF כפורמטים ביניים במקום.


OBJ ל‑STL: הכנת מודל להדפסת תלת‑ממד

OBJ הוא פורמט הפלט הנפוץ ביותר מכלי מודלינג ופיסול. STL הוא השפה המשותפת של חותכי ההדפסה בתלת‑ממד. המרה ביניהם היא קריאה אחת.

from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions

scene = Scene.from_file("model.obj")

opts = StlSaveOptions()
scene.save("model.stl", opts)

STL מקודד רק משולשים. אם קובץ ה‑OBJ שלך מכיל משולשי קווד או n‑גונים, המייצא ממיר אותם למשולשים אוטומטית לפני הכתיבה. אם ברצונך לשלוט בטריאנגולציה במפורש לפני השמירה, קרא mesh.triangulate() על כל רשת (mesh) בסצנה:

from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.formats import StlSaveOptions

scene = Scene.from_file("model.obj")

def triangulate_all(node):
    for entity in list(node.entities):
        if isinstance(entity, Mesh):
            tri_mesh = entity.triangulate()
            # Attach the triangulated mesh via add_entity
            node.add_entity(tri_mesh)
    for child in node.child_nodes:
        triangulate_all(child)

triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())

OBJ ל‑glTF: ייצוא לאינטרנט ולמנועי משחק

glTF 2.0 הוא פורמט ההחלפה המועדף למנועי רינדור בזמן אמת, מציגי WebGL, ומנועי משחק כגון Babylon.js, Three.js, ו-Unity. GLB (הגרסה הבינרית) אורז גאומטריה, מרקמים וחומרים בקובץ יחיד עצמאי, מה שמקל על ההגשה דרך HTTP.

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("model.obj")

##Save as JSON-based glTF (external buffer)
opts_gltf = GltfSaveOptions()
scene.save("model.gltf", opts_gltf)

##Save as self-contained GLB binary: preferred for web delivery
scene.save("model.glb", GltfSaveOptions())

הפורמט נובע מהרחבת הקובץ: .gltf מייצר את זוג ה-JSON+binary-buffer; .glb מייצר את הבינארי בקובץ יחיד. נתוני חומר OBJ (LambertMaterial, PhongMaterial) מועברים לייצוג החומר glTF PBR שבו קיים מקביל.


STL ל‑glTF: מהסורק או פלט CAD לאינטרנט

קבצי STL מסורקים תלת‑ממדיים וממערכות CAD הם קלטים נפוצים שצריך להפוך לצפייה ברשת. STL מכיל רק גאומטריית משולשים ואין בו נתוני חומר, ולכן ההמרה היא פשוטה.

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())

אם קובץ ה‑STL נוצר על‑ידי כלי CAD עם מערכת קואורדינטות בלתי רגילה (Z‑up לעומת Y‑up), ניתן לבדוק ולתקן את שינוי הצורה של צומת השורש לפני השמירה:

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("cad_export.stl")

##Rotate 90 degrees around X to convert Z-up to Y-up
root = scene.root_node
root.transform.set_euler_angles(-90.0, 0.0, 0.0)

scene.save("cad_export_yup.glb", GltfSaveOptions())

glTF ל‑3MF: הכנה לייצור תוספתי

3MF is a modern 3D printing format backed by the 3MF Consortium. It supports richer metadata than STL (colour, material assignments, build instructions) and is accepted by slicer software such as PrusaSlicer and Bambu Studio. If you are delivering models from a web viewer into a printing workflow, converting GLB to 3MF is a useful step.

from aspose.threed import Scene
from aspose.threed import FileFormat
from aspose.threed.formats import SaveOptions

scene = Scene.from_file("model.glb")
scene.save("model.3mf")

הפורמט 3MF מזוהה אוטומטית מה .3mf הרחבה. לשליטה מפורשת, העבר a SaveOptions מופע מוגדר עבור 3MF.


תבנית המרה במקבץ

בפועל, משימות המרה פועלות על תיקיות של קבצים ולא על קבצים בודדים. התבנית שלהלן מטפלת בתיקייה של קבצי OBJ וממירה כל אחד מהם ל‑GLB, עם טיפול בשגיאות לכל קובץ כך שקובץ פגום יחיד לא יפסיק את הריצה כולה.

import os
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

input_dir = "./obj_files"
output_dir = "./glb_files"

os.makedirs(output_dir, exist_ok=True)

opts = GltfSaveOptions()
results = {"ok": [], "failed": []}

for filename in os.listdir(input_dir):
    if not filename.lower().endswith(".obj"):
        continue
    src = os.path.join(input_dir, filename)
    stem = os.path.splitext(filename)[0]
    dst = os.path.join(output_dir, stem + ".glb")
    try:
        scene = Scene.from_file(src)
        scene.save(dst, opts)
        results["ok"].append(filename)
        print(f"OK  {filename} -> {stem}.glb")
    except Exception as exc:
        results["failed"].append((filename, str(exc)))
        print(f"ERR {filename}: {exc}")

print(f"\n{len(results['ok'])} converted, {len(results['failed'])} failed.")
if results["failed"]:
    for name, reason in results["failed"]:
        print(f"  {name}: {reason}")

תבנית זו מתרחבת באופן טבעי לזוגות פורמט מקור/יעד אחרים: שנה את מסנן ההרחבה ואת ה SaveOptions מחלקה לכל שילוב בטבלת התמיכה למעלה.


סיכום

Aspose.3D FOSS עבור Python עושה את המרת הפורמט פשוטה: טען עם Scene.from_file, באופן אופציונלי בדוק או שנה את גרף הסצנה, ואז שמור עם המתאים SaveOptions. הספרייה מטפלת במשולשיות, נרמול קואורדינטות, ובתכונות ייחודיות של פורמט באופן פנימי.

לרשימה מלאה של מחלקות ושיטות, ראה את תיעוד API. כדי להעמיק במודל גרף הסצנה (צמתים, רשתות, טרנספורמציות), ראה: