Υποστήριξη Μορφών

Aspose.3D FOSS για Python μπορεί να διαβάσει και να γράψει επτά 3D μορφές χρησιμοποιώντας μια ενιαία αναπαράσταση σκηνής στη μνήμη. Η βιβλιοθήκη μετατρέπει κάθε μορφή σε ένα κοινό Scene αντικείμενο κατά τη φόρτωση και σειριοποιεί αυτό το αντικείμενο πίσω στη μορφή-στόχο κατά την αποθήκευση. Αυτό σημαίνει ότι μια σκηνή που φορτώθηκε από OBJ μπορεί να αποθηκευτεί απευθείας σε glTF χωρίς κανένα ενδιάμεσο βήμα μετατροπής.


Υποστηριζόμενες Μορφές

ΜορφήΕπέκτασηΑνάγνωσηΕγγραφήΚλάση OptionsΣημειώσεις
Wavefront OBJ.objΝαιΝαιObjLoadOptions.mtl υποστηρίζεται η φόρτωση υλικού
STL (binary).stlΝαιΝαιStlSaveOptionsΔυαδική και ASCII ανάγνωση· η αποθήκευση προεπιλογή είναι δυαδική
STL (ASCII).stlΝαιΝαιStlSaveOptionsΕπαλήθευση πλήρους διαδρομής
glTF 2.0.gltfΝαιΝαιGltfSaveOptionsΠλήρης γράφος σκηνής, υλικά και κινούμενα σχέδια διατηρούνται
GLB (binary glTF).glbΝαιΝαιGltfSaveOptionsΔυαδικό κοντέινερ ενός αρχείου
COLLADA.daeΝαιΝαιColladaLoadOptions / ColladaSaveOptionsΙεραρχία σκηνής και υλικά
3MF.3mfΝαιΝαιThreeMfSaveOptionsΜορφή προσθετικής κατασκευής
FBX.fbxΜερικόΌχιN/ATokenizer λειτουργεί· ο πλήρης parser βρίσκεται σε εξέλιξημη έτοιμο για παραγωγή)

Μορφή OBJ

Το Wavefront OBJ είναι η πιο ευρέως υποστηριζόμενη μορφή ανταλλαγής για στατικά πλέγματα. Aspose.3D FOSS φορτώνει τη γεωμετρία (κορυφές, κανονικές, συντεταγμένες UV και πολυγωνικές όψεις) και προαιρετικά το συνοδευτικό .mtl αρχείο υλικού.

ObjLoadOptions

ΙδιότηταΤύποςΠροεπιλογήΠεριγραφή
enable_materialsboolTrueΑναλύστε το .mtl αρχείο που αναφέρεται από την κεφαλίδα OBJ
flip_coordinate_systemboolFalseΜετατροπή από Y-up δεξιόχειρη σε Z-up δεξιόχειρη
normalize_normalboolTrueΚανονικοποίηση όλων των εισαγόμενων κανονικών επιφάνειας σε μονάδα μήκους
scalefloat1.0Ομοιόμορφος συντελεστής κλίμακας που εφαρμόζεται σε όλες τις θέσεις κορυφών

Φόρτωση αρχείου OBJ

from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions

options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0

scene = Scene()
scene.open("model.obj", options)

print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")

Αποθήκευση σε OBJ

scene.save("output.obj")

Η εξαγωγή OBJ γράφει τις θέσεις των κορυφών και τις πολυγωνικές όψεις. Εάν η σκηνή περιέχει LambertMaterial ή PhongMaterial αντικείμενα, η βιβλιοθήκη γράφει ένα συνοδευτικό .mtl αρχείο αυτόματα.


Μορφή STL

Το STL (STereoLithography) αποθηκεύει τριγωνικά πλέγματα ως μια μη ευρετηριασμένη λίστα προσώπων. Υποστηρίζονται τόσο οι δυαδικές όσο και οι ASCII εκδόσεις για ανάγνωση· η βιβλιοθήκη προεπιλέγει τη δυαδική μορφή κατά την αποθήκευση.

StlSaveOptions

StlSaveOptions δεν έχει υποχρεωτικά πεδία. Δημιουργήστε το για να το περάσετε σε scene.save():

from aspose.threed.formats import StlSaveOptions

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

Παράδειγμα round‑trip

from aspose.threed import Scene

##Load
scene = Scene.from_file("model.stl")

##Inspect
for node in scene.root_node.child_nodes:
    if node.entity:
        print(f"{node.name}: {len(node.entity.control_points)} vertices")

##Save
scene.save("roundtrip.stl")

Το STL αποθηκεύει μόνο τριγωνική γεωμετρία, χωρίς κανόνες εκτός του κανονικού προσώπου, χωρίς συντεταγμένες UV, χωρίς υλικά και χωρίς ιεραρχία. Εάν η σκηνή σας περιέχει τετράπλευρα ή πολυγωνικά υψηλότερης τάξης, αυτά τριγωνοποιούνται αυτόματα κατά την αποθήκευση.


Μορφή glTF / GLB

Το glTF 2.0 είναι η προτεινόμενη μορφή για σύγχρονη ανταλλαγή 3D. Διατηρεί το πλήρες γράφημα σκηνής (ιεραρχία κόμβων, ονομασμένοι κόμβοι, μετασχηματισμοί), υλικά (LambertMaterial, PhongMaterial → μετατροπή PBR), και κλιπ κίνησης. Το GLB είναι η παραλλαγή ενός αρχείου δυαδικού κοντέινερ.

GltfSaveOptions

from aspose.threed.formats import GltfSaveOptions

opts = GltfSaveOptions()
scene.save("output.gltf", opts)   # JSON + external .bin
scene.save("output.glb",  opts)   # Self-contained binary

Υποστήριξη υλικών

Aspose.3D FOSS υλικά αντιστοιχίζονται στο glTF pbrMetallicRoughness κατά την εξαγωγή:

from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3

scene = Scene()
node = scene.root_node.create_child_node("object")

mat = PhongMaterial()
mat.diffuse_color  = Vector3(0.8, 0.2, 0.2)   # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat

scene.save("colored.gltf")

Επαλήθευση εξόδου glTF

import json

with open("output.gltf") as f:
    data = json.load(f)

print(f"Asset version : {data['asset']['version']}")
print(f"Nodes         : {len(data.get('nodes', []))}")
print(f"Meshes        : {len(data.get('meshes', []))}")

Μορφή COLLADA

COLLADA (.dae) είναι μια μορφή βασισμένη σε XML που υποστηρίζει ιεραρχίες σκηνής, υλικά, πολλαπλά κανάλια UV και σκελετική κίνηση. Aspose.3D FOSS διαβάζει και γράφει το πλήρες δέντρο κόμβων και τους ορισμούς υλικών.

from aspose.threed import Scene

##Load a COLLADA file
scene = Scene.from_file("model.dae")

##Inspect top-level nodes
for node in scene.root_node.child_nodes:
    print(f"  {node.name}")

##Save back to COLLADA
scene.save("output.dae")

Το COLLADA είναι μια καλή επιλογή όταν χρειάζεται να κάνετε round‑trip ιεραρχίες με ονομαστικούς κόμβους και υλικά χωρίς καμία απώλεια δεδομένων.


3MF Format

3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.

from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions

scene = Scene.from_file("part.stl")   # Load from STL
opts  = ThreeMfSaveOptions()
scene.save("part.3mf", opts)          # Write as 3MF

3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).


Μορφή FBX

Κατάσταση: σε εξέλιξη (δεν είναι έτοιμο για παραγωγή).

FBX (.fbx) η υποστήριξη στο Aspose.3D FOSS βρίσκεται επί του παρόντος στο στάδιο του tokenizer. Ο δυαδικός tokenizer FBX μπορεί να αναλύσει τη δομή του αρχείου, αλλά ο πλήρης parser κόμβων, πλέγματος και υλικών έχει γνωστά σφάλματα και δεν είναι ολοκληρωμένος. Τα αποτελέσματα ανάγνωσης FBX θα πρέπει να θεωρούνται πειραματικά.

Μην χρησιμοποιείτε το FBX σε παραγωγικές αλυσίδες με αυτήν την έκδοση. Αν τα πηγαία δεδομένα σας είναι σε FBX, μετατρέψτε τα πρώτα σε glTF ή OBJ χρησιμοποιώντας το Blender ή το FBX Review πριν τη φόρτωση με Aspose.3D FOSS.

Η εγγραφή FBX δεν υποστηρίζεται.


Αυτόματη Ανίχνευση Μορφής

Scene.from_file() και scene.open() ανιχνεύει τη μορφή αυτόματα χρησιμοποιώντας την επέκταση του αρχείου και, όπου είναι διαθέσιμα, τα magic bytes στην κεφαλίδα του αρχείου:

from aspose.threed import Scene

##The library detects each format without being told explicitly
scene_obj  = Scene.from_file("model.obj")
scene_glb  = Scene.from_file("model.glb")
scene_stl  = Scene.from_file("model.stl")
scene_dae  = Scene.from_file("model.dae")
scene_3mf  = Scene.from_file("model.3mf")

Εάν η επέκταση λείπει ή είναι ασαφής, η βιβλιοθήκη επιστρέφει στην επιθεώρηση της κεφαλίδας (magic bytes). Τα μη υποστηριζόμενα ή μη αναγνωρισμένα αρχεία προκαλούν ένα IOError με ένα περιγραφικό μήνυμα.


Συμβουλές και Καλές Πρακτικές

  • Χρησιμοποιήστε glTF ή GLB για σύγχροπες γραμμές παραγωγής. Το glTF διατηρεί το πλήρες γράφημα σκηνής, τα υλικά και τα δεδομένα κίνησης. Είναι η πιο πλήρης μορφή για ανταλλαγή με μηχανές παιχνιδιών και προβολείς ιστού.
  • Χρησιμοποιήστε OBJ για μέγιστη συμβατότητα. Το OBJ υποστηρίζεται σχεδόν από κάθε εργαλείο 3D. Είναι περιορισμένο σε στατικά πλέγματα, αλλά είναι εξαιρετικά φορητό.
  • Χρησιμοποιήστε το 3MF για εκτύπωση. 3MF carries colour, orientation hints, and print settings that STL cannot express.
  • Αποφύγετε το FBX μέχρι να είναι έτοιμο για παραγωγή. Ελέγξτε τις σημειώσεις έκδοσης για την έκδοση στην οποία η πλήρης ανάλυση FBX είναι ολοκληρωμένη.
  • Ταιριάξτε την επέκταση αποθήκευσης με τη μορφή. Μην περάσετε ένα .gltf επέκταση όταν θέλετε δυαδικό GLB· χρησιμοποιήστε .glb ρητά. Η επέκταση καθορίζει ποιος σειριακοποιητής χρησιμοποιείται.
  • Ελέγξτε τη συμβατότητα των πολυγώνων. Τα STL και 3MF απαιτούν τρίγωνα. Τα Quads και N-gons τριγωνοποιούνται αυτόματα κατά την αποθήκευση, αλλά ο αριθμός των κορυφών θα αυξηθεί. Εάν χρειάζεστε έλεγχο της τριγωνοποίησης, καλέστε mesh.triangulate() πριν την αποθήκευση.
 Ελληνικά