Υποστήριξη Μορφών 3D
Aspose.3D FOSS για TypeScript διαβάζει και γράφει επτά κύρια 3D φορμά αρχείων. Η ανίχνευση του φορμά είναι αυτόματη κατά τη φόρτωση: η βιβλιοθήκη ελέγχει τους δυαδικούς μαγικούς αριθμούς ώστε να μην χρειάζεται να καθορίσετε το πηγαίο φορμά. Οι κλάσεις επιλογών ειδικές για κάθε φορμά εισάγονται από υπο-διαδρομές του @aspose/3d πακέτο.
Υποστηριζόμενες μορφές
| Μορφή | Επέκταση | Ανάγνωση | Εγγραφή | Κλάση Μορφής | Σημειώσεις |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Ναι | Ναι | ObjFormat | Διαβάζει .mtl υλικά; γράφει .mtl μαζί με .obj |
| glTF 2.0 | .gltf | Ναι | Ναι | GltfFormat | JSON κείμενο + .bin sidecar |
| GLB | .glb | Ναι | Ναι | GltfFormat | Binary glTF; ορισμένο binaryMode = true |
| STL | .stl | Ναι | Ναι | StlFormat | Δυαδικές και ASCII λειτουργίες |
| 3MF | .3mf | Ναι | Ναι | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Όχι* | Όχι* | FbxFormat | Υπάρχει εισαγωγέας/εξαγωγέας, αλλά η αυτόματη ανίχνευση μορφής δεν είναι ενσωματωμένη· δεν είναι χρησιμοποιήσιμο μέσω scene.open() |
| COLLADA | .dae | Ναι | Ναι | ColladaFormat | Απαιτεί xmldom (αυτόματη εγκατάσταση) |
OBJ (Wavefront)
Το OBJ υποστηρίζει τόσο εισαγωγή όσο και εξαγωγή σε @aspose/3d. Όταν αποθηκεύετε ως OBJ, η βιβλιοθήκη υλικών (.mtl) γράφεται αυτόματα δίπλα στο .obj αρχείο. Χρησιμοποιήστε ObjLoadOptions για να ελέγξετε τη φόρτωση υλικού και τη συμπεριφορά του συστήματος συντεταγμένων.
Κύριες επιλογές για ObjLoadOptions:
| Επιλογή | Τύπος | Προεπιλογή | Αποτέλεσμα |
|---|---|---|---|
enableMaterials | boolean | true | Αναλύστε το .mtl αρχείο που αναφέρεται από mtllib |
flipCoordinateSystem | boolean | false | Αναστρέψτε τους άξονες Y/Z για να ταιριάζουν με δεξιόχειρες συστήματα |
scale | number | 1.0 | Ομοιόμορφη κλίμακα που εφαρμόζεται σε όλες τις κορυφές κατά τη φόρτωση |
normalizeNormal | boolean | true | Κανονικοποίηση των κανονικών των κορυφών σε μονάδα μήκους |
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
opts.normalizeNormal = true;
scene.open('model.obj', opts);
console.log(`Loaded ${scene.rootNode.childNodes.length} top-level node(s)`);Για να μετατρέψετε ένα OBJ σε οποιαδήποτε μορφή εγγραφής, φορτώστε το και καλέστε scene.save() με την κλάση του επιθυμητού μορφότυπου.
glTF and GLB
Το glTF 2.0 είναι η προτεινόμενη μορφή ανταλλαγής για χρήση στο web και σε μηχανές παιχνιδιών. Η βιβλιοθήκη χρησιμοποιεί το ίδιο GltfFormat κλάση για και τα δύο .gltf (JSON + sidecar) και .glb (δυαδικό, αυτόνομο) έξοδο. Εναλλαγή μεταξύ τους με GltfSaveOptions.binaryMode.
Φόρτωση glTF ή GLB:
import { Scene } from '@aspose/3d';
import { GltfLoadOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.gltf', new GltfLoadOptions());
// or
scene.open('model.glb'); // format detected from magic bytes
Εξαγωγή ως JSON glTF (.gltf + .bin):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.fbx');
const opts = new GltfSaveOptions();
opts.binaryMode = false; // produces output.gltf + output.bin
scene.save('output.gltf', GltfFormat.getInstance(), opts);Εξαγωγή ως δυαδικό GLB (.glb):
import { Scene } from '@aspose/3d';
import { GltfSaveOptions, GltfFormat } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('input.obj');
const opts = new GltfSaveOptions();
opts.binaryMode = true; // single self-contained file
scene.save('output.glb', GltfFormat.getInstance(), opts);Χρησιμοποιήστε binaryMode = true για παράδοση περιουσιακών στοιχείων παραγωγής. Ένα ενιαίο .glb φορτώνεται πιο γρήγορα σε προγράμματα περιήγησης και μηχανές από το διαχωρισμένο ζεύγος κειμένου + δυαδικού.
STL
Το STL είναι μια μορφή τριγωνοποιημένου πλέγματος που χρησιμοποιείται σε CAD και 3D εκτύπωση. Υποστηρίζονται τόσο τα δυαδικά όσο και τα ASCII STL για είσοδο και έξοδο. StlSaveOptions.binaryMode ελέγχει αν η έξοδος είναι δυαδική (συμπαγής) ή ASCII (ανθρώπινα αναγνώσιμη).
import { Scene } from '@aspose/3d';
import { StlLoadOptions, StlSaveOptions } from '@aspose/3d/formats/stl';
const scene = new Scene();
scene.open('model.stl', new StlLoadOptions());
// Export as binary STL (default, compact)
const binaryOpts = new StlSaveOptions();
binaryOpts.binaryMode = true;
scene.save('output_binary.stl', binaryOpts);
// Export as ASCII STL (human-readable)
const asciiOpts = new StlSaveOptions();
asciiOpts.binaryMode = false;
scene.save('output_ascii.stl', asciiOpts);Το STL αποθηκεύει μόνο τριγωνοποιημένη γεωμετρία και κανονικές κορυφών. Τα υλικά και τα δεδομένα UV δεν διατηρούνται στο STL.
3MF (3D Manufacturing Format)
3MF is an XML-based format designed for additive manufacturing. It supports color and material metadata alongside geometry. Use it when exchanging files with 3D printing slicers or manufacturing workflows.
import { Scene } from '@aspose/3d';
import { ThreeMfSaveOptions } from '@aspose/3d/formats/3mf';
const scene = new Scene();
scene.open('model.3mf');
// Re-export as 3MF
scene.save('output.3mf', new ThreeMfSaveOptions());3MF files are ZIP archives internally. The library handles archive creation and extraction automatically.
FBX
Προειδοποίηση: Οι κλάσεις εισαγωγέα και εξαγωγέα FBX (FbxImporter, FbxExporter) υπάρχουν στη βιβλιοθήκη, αλλά η αυτόματη ανίχνευση μορφής FBX είναι δεν είναι ενσωματωμένη στο scene.open() ή scene.save(). Η κλήση scene.open('file.fbx') δεν θα ενεργοποιήσει τον εισαγωγέα FBX — το αρχείο θα περάσει στην εναλλακτική STL. Η κλήση scene.save('output.fbx', opts) δεν θα ενεργοποιήσει τον εξαγωγέα FBX. Ο πίνακας υποστήριξης μορφών παραπάνω σημειώνει το FBX ως No* για αυτόν τον λόγο. Χρησιμοποιήστε GLB ή COLLADA για πλήρως λειτουργική εισαγωγή και εξαγωγή μέσω scene.open() / scene.save().
COLLADA (DAE)
Το COLLADA είναι μια μορφή ανταλλαγής βασισμένη σε XML που υποστηρίζεται από μια ευρεία γκάμα εργαλείων DCC (Blender, Maya, Cinema 4D). Η βιβλιοθήκη χρησιμοποιεί το xmldom εξάρτημα για την ανάλυση XML· εγκαθίσταται αυτόματα με npm install @aspose/3d.
import { Scene } from '@aspose/3d';
import { ColladaSaveOptions } from '@aspose/3d/formats/collada';
const scene = new Scene();
scene.open('model.dae');
// Re-export as COLLADA
const saveOpts = new ColladaSaveOptions();
scene.save('output.dae', saveOpts);Τα αρχεία COLLADA μπορεί να περιέχουν μεταδεδομένα κλιμάκωσης μονάδων (<unit> στοιχείο). Η βιβλιοθήκη εφαρμόζει αυτόματα τη μετατροπή μονάδων κατά τη φόρτωση.
Αυτόματη Ανίχνευση Μορφής
Κατά τη φόρτωση από διαδρομή αρχείου, η βιβλιοθήκη προσπαθεί να ανιχνεύσει τη μορφή από τους δυαδικούς μαγικούς αριθμούς πριν επιστρέψει στην επέκταση του αρχείου. Αυτό σημαίνει ότι μπορείτε να φορτώσετε ένα αρχείο GLB με όνομα .bin ή ένα αρχείο STL με όνομα .model χωρίς να καθορίσετε τη μορφή ρητά.
Κατά τη φόρτωση από ένα Buffer με scene.openFromBuffer(), η ανίχνευση magic-number είναι ο κύριος μηχανισμός:
import { Scene } from '@aspose/3d';
import * as fs from 'fs';
const buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(buffer); // format detected from magic bytes: 'glTF'
console.log(`Root has ${scene.rootNode.childNodes.length} child node(s)`);Μορφές με αξιόπιστους magic numbers: GLB (glTF), δυαδικό STL (80-byte header + triangle count), 3MF (ZIP magic PK). OBJ και COLLADA είναι text-based και ανιχνεύονται από την επέκταση αρχείου ή από την options class που περνάτε.
Συμβουλές
- Το OBJ υποστηρίζει τόσο την εισαγωγή όσο και την εξαγωγή: όταν αποθηκεύεται ως OBJ, το
.mtlτο αρχείο υλικού γράφεται αυτόματα δίπλα στο.objαρχείο. - Χρησιμοποιήστε GLB για παράδοση στο web:η αυτόνομη δυαδική μορφή αποφεύγει προβλήματα CORS με
.binτα sidecars και φορτώνει πιο γρήγορα σε renderers WebGL. - Περάστε επιλογές ειδικές για τη μορφή: γενικό
scene.open(path)λειτουργεί για τις περισσότερες μορφές, αλλά η μεταβίβαση της κλάσης επιλογών φορτωτή ενεργοποιεί συμπεριφορά ειδική για τη μορφή, όπως η φόρτωση υλικού OBJ ή η κανονικοποίηση συντεταγμένων STL. xmldomαπαιτείται για COLLADA: εγκαθίσταται αυτόματα. Μην το προσθέσετε στοpeerDependenciesή προσπαθήστε να το αφαιρέσετε· ο αναγνώστης COLLADA το καλεί άμεσα.
Κοινά Προβλήματα
| Σύμπτωμα | Πιθανή Αιτία | Διόρθωση |
|---|---|---|
| Τα υλικά OBJ είναι κενά μετά τη φόρτωση | enableMaterials δεν έχει οριστεί | Πέρασμα ObjLoadOptions με enableMaterials = true |
Το GLB παράγει ένα .bin πρόσθετο | binaryMode προεπιλογή σε false | Ορισμός opts.binaryMode = true σε GltfSaveOptions |
scene.open() εμφανίζει “μη υποστηριζόμενη μορφή” | Η επέκταση αρχείου δεν αναγνωρίζεται | Πέρασε το ταιριαστό *LoadOptions κλάση ή χρησιμοποιήστε openFromBuffer() |
| Η φόρτωση COLLADA αποτυγχάνει με σφάλμα XML | xmldom λείπει ή δεν ταιριάζει | Εκτέλεση npm install @aspose/3d ξανά; xmldom είναι άμεση εξάρτηση |
| Τα normals του STL χάθηκαν στην εξαγωγή ASCII | ASCII STL παραλείπει τα κανονικά ανά πρόσωπο | Χρησιμοποιήστε binaryMode = true για έξοδο που διατηρεί τα κανονικά |
Δείτε επίσης
- Χαρακτηριστικά και Λειτουργίες: γράφημα σκηνής, πλέγμα, υλικά, animation, και math APIs.
- Γράφημα Σκηνής: δημιουργία και διάσχιση του δέντρου κόμβων.
- Πώς να δημιουργήσετε ένα 3D Mesh προγραμματιστικά