Πώς να μετατρέψετε 3D μοντέλα σε TypeScript
Το Aspose.3D FOSS for TypeScript μετατρέπει μεταξύ 3D μορφών φορτώνοντας σε μια ουδέτερη Scene αναπαράσταση και αποθηκεύοντας στη μορφή‑στόχο. Αυτός ο οδηγός δείχνει τις πιο κοινές μετατροπές.
Οδηγός βήμα προς βήμα
Βήμα 1: Εγκατάσταση @aspose/3d
npm install @aspose/3dΒήμα 2: Φόρτωση του Πηγαίου Αρχείου
Δημιουργήστε ένα Scene και καλέστε το scene.open(). Χρησιμοποιήστε την κλάση *LoadOptions ειδική για τη μορφή για τα καλύτερα αποτελέσματα.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);Βήμα 3: Αποθήκευση στη μορφή προορισμού
Καλέστε scene.save() με τη διαδρομή εξόδου. Η μορφή εξόδου ανιχνεύεται από την επέκταση του αρχείου.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');Σημείωση: Το FBX δεν υποστηρίζεται από
scene.save()αυτόματη ανίχνευση. Η.fbxεπέκταση δεν είναι συνδεδεμένη με κανέναν εξαγωγέα — η αποθήκευση σε.fbxσιωπηρά γράφει περιεχόμενο μορφής OBJ. Χρησιμοποιήστε OBJ, glTF, STL, 3MF ή COLLADA για αξιόπιστη έξοδο.
Βήμα 4: Κοινά παραδείγματα μετατροπής
OBJ σε glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — Δεν υποστηρίζεται
Η αυτόματη ανίχνευση FBX δεν είναι ενσωματωμένη στο
scene.open(). Ένα αρχείο.fbxπου περνά στοscene.open()δεν αναγνωρίζεται από κανέναν ανιχνευτή μορφής και περνά στον αναλυτή STL, ο οποίος θα αποτύχει ή θα παράγει άχρηστο περιεχόμενο. Οι κλάσεις εισαγωγέα/εξαγωγέα FBX υπάρχουν στη βιβλιοθήκη, αλλά απαιτούν άμεση κλήση αντί για το υψηλού επιπέδουopen()/save()API. Χρησιμοποιήστε COLLADA, OBJ ή glTF ως εναλλακτική λύση για το FBX.
glTF σε STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA σε 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');Βήμα 5: Μαζική μετατροπή πολλαπλών αρχείων
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}Υποστηριζόμενος Πίνακας Μετατροπής
| Από \ Προς | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX δεν υποστηρίζεται μέσω του υψηλού επιπέδου open()/save() API — η μορφή δεν είναι ενσωματωμένη στην αυτόματη ανίχνευση. Όλα τα κελιά FBX παραπάνω είναι ✗.
Κοινά προβλήματα και διορθώσεις
Τα υλικά χάνονται μετά τη μετατροπή
Τα υλικά OBJ (usemtl, .mtl αρχείο) φορτώνονται όταν ObjLoadOptions.enableMaterials = true. Κατά την αποθήκευση σε glTF, οι ιδιότητες υλικού PBR αντιστοιχίζονται αυτόματα. Τα σύνθετα υλικά (διαδικαστικά, πολυεπίπεδα) ενδέχεται να μετατραπούν με μειωμένη πιστότητα.
Το πλέγμα εμφανίζεται κλιμακωμένο λανθασμένα
Διαφορετικές μορφές χρησιμοποιούν διαφορετικές προεπιλεγμένες μονάδες (χιλιοστά για STL, μέτρα για glTF). Χρησιμοποιήστε ObjLoadOptions.scale κατά τη φόρτωση ή StlSaveOptions.scaleFactor κατά την αποθήκευση για να ομαλοποιήσετε τις μονάδες.
Ασυμφωνία συστήματος συντεταγμένων (μοντέλο αντιστραμμένο ή περιστραμμένο)
Ορισμένες μορφές χρησιμοποιούν το δεξιό Y‑πάνω, άλλες Z‑πάνω. Χρησιμοποιήστε ObjLoadOptions.flipCoordinateSystem = true ή εφαρμόστε μια περιστροφή στον ριζικό κόμβο μετά τη φόρτωση.
Συχνές Ερωτήσεις
Διατηρεί η μετατροπή τις κινήσεις;
Τα δεδομένα κίνησης διατηρούνται κατά τη μετατροπή μεταξύ μορφών που τα υποστηρίζουν (π.χ., COLLADA → glTF). Τα STL και OBJ δεν μεταφέρουν δεδομένα κίνησης. Το FBX δεν υποστηρίζεται μέσω scene.open()/scene.save(), επομένως οι κυκλικές μετατροπές κίνησης FBX δεν είναι διαθέσιμες μέσω του υψηλού επιπέδου API.
Διατηρούνται τα δεδομένα υφής;
Οι υφές που αναφέρονται από υλικά OBJ ή ενσωματώνονται σε glTF μεταφέρονται στο γράφημα σκηνής. Όταν αποθηκεύεται σε GLB (binaryMode = true), η δυαδική μνήμη ενσωματώνεται σε ένα ενιαίο αρχείο. Για έξοδο OBJ, οι υφές αποθηκεύονται ως ξεχωριστά αρχεία δίπλα στο .obj.
Μπορώ να μετατρέψω πολλά αρχεία ταυτόχρονα;
scene.open() και scene.save() είναι συγχρονισμένα. Χρησιμοποιήστε το Node.js worker_threads για παράλληλη επεξεργασία.