Εισαγωγή

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 είναι μια φυσική επιλογή για αυτή τη δουλειά: τα shell scripts είναι πολύ εύθραυστα, και οι πλήρεις ενσωματώσεις εργαλείων DCC (digital content creation) είναι πολύ βαρύες για επεξεργασία σε παρτίδες. Αυτό που χρειάζεστε είναι μια βιβλιοθήκη που μπορεί να φορτώσει οποιαδήποτε από αυτές τις μορφές, να σας παρέχει ένα συνεπές γράφημα σκηνής και να γράφει ξανά σε οποιαδήποτε μορφή προορισμού χωρίς να απαιτεί GUI ή οδηγό γραφικών.

Aspose.3D FOSS για 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ΝαιΝαιΕισαγωγή από εργαλεία animation; ColladaSaveOptions υποστηρίζει εξαγωγή
3MF.3mfΝαιΝαιΚατασκευή προσθετικού, πλουσιότερα μεταδεδομένα εκτύπωσης από το STL

Η ανίχνευση μορφής είναι αυτόματη από την επέκταση αρχείου. Οι κλάσεις επιλογών ειδικές για μορφή (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) είναι διαθέσιμες όταν χρειάζεστε λεπτομερή έλεγχο.

Σημείωση για το FBX: Η βιβλιοθήκη περιλαμβάνει έναν μερικό διαχωριστή FBX για εισαγωγή. Το FBX δεν συνιστάται για παραγωγικές ροές μετατροπής σε αυτήν την έκδοση· χρησιμοποιήστε OBJ ή glTF ως ενδιάμεσες μορφές αντί αυτού.


OBJ σε STL: Προετοιμασία μοντέλου για 3D εκτύπωση

Το OBJ είναι η πιο κοινή μορφή εξόδου από εργαλεία μοντελοποίησης και γλυπτικής. Το STL είναι η lingua franca των slicers 3D εκτύπωσης. Η μετατροπή μεταξύ τους είναι μια ενιαία κλήση.

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() σε κάθε πλέγμα στη σκηνή:

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: Εξαγωγή για Web και Game Engines

Το glTF 2.0 είναι η προτιμώμενη μορφή ανταλλαγής για renderers πραγματικού χρόνου, προβολείς 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 στο Web

Τα αρχεία STL από 3D σαρωτές και συστήματα CAD είναι κοινές εισόδους που πρέπει να γίνουν προβλέψιμες στο web. Το 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 vs 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 επέκταση. Για ρητό έλεγχο, περάστε ένα 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 Reference. Για πιο λεπτομερή κατανόηση του μοντέλου γραφήματος σκηνής (κόμβοι, πλέγματα, μετασχηματισμοί), δείτε: