Φορτώνοντας 3D μοντέλα
@aspose/3d Δύο τρόποι φόρτισης για την Scene Η τάξη: open() για την φόρτιση του αρχείου και openFromBuffer() Η ανίχνευση μορφών είναι αυτόματη από δυαδικούς αριθμούς ή επέκταση αρχείου, οπότε σπάνια χρειάζεται να προσδιορίσετε ρητά τη μορφή πηγής.
Κατεβάστε από ένα αρχείο δρόμο
Μεταβείτε το αρχείο δρόμο string σε scene.open().Η βιβλιοθήκη ανιχνεύει τη μορφή από την επέκταση αρχείου και, για δυαδικές μορφές, από τα μαγικά bytes:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx');
console.log(`Root children: ${scene.rootNode.childNodes.length}`);
console.log(`Animation clips: ${scene.animationClips.length}`);Περιορισμός του FBX: Η υποστήριξη FBX περιορίζεται μόνο στην εισαγωγή ASCII FB X. Το Binary FBx δεν υποστηρίζεται ακόμα. το FB x επίσης δεν είναι συνδεδεμένο με την αυτόματη ανίχνευση μορφής, οπότε η φόρτωση μπορεί να απαιτήσει ρητή
FbxLoadOptions.Για αξιόπιστη φόρτιση μοντέλου, χρησιμοποιήστε μορφές OBJ, STL ή glTF.
open() Αντικαθιστά οποιοδήποτε υπάρχον περιεχόμενο σκηνής. εάν χρειάζεται να φορτώσετε πολλαπλά αρχεία, δημιουργήστε ξεχωριστά Scene των περιπτώσεων.
Κατεβάστε OBJ με υλικά
OBJ αρχεία αναφοράς υλικών μέσω ενός πλευρικού στήθους .mtl Ετικέτες: Υλικό φορτίο Ενεργοποιείται με παραλλαγή (ObjLoadOptions.enableMaterials = trueΠΑΣΟΚ ObjLoadOptions Για να ελέγξετε αυτό και άλλες επιλογές χρόνου φόρτισης:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true; // load the .mtl sidecar
options.flipCoordinateSystem = false; // keep original Y-up orientation
options.normalizeNormal = true; // fix degenerate normals
options.scale = 1.0; // unit scale multiplier
scene.open('character.obj', options);
// Inspect materials on the first node
const first = scene.rootNode.childNodes[0];
if (first) {
console.log(`Materials on ${first.name}: ${first.materials.length}`);
}Κατεβάστε από ένα buffer
Χρησιμοποιήστε openFromBuffer() όταν τα δεδομένα αρχείων είναι ήδη στη μνήμη, για παράδειγμα από ένα HTTP fetch, μια βάση δεδομένων BLOB ή μια εκχύλισμα αρχείου zip. Αυτό αποφεύγει τη γραφή στο δίσκο:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import * as fs from 'fs';
const buffer: Buffer = fs.readFileSync('model.obj');
const scene = new Scene();
const options = new ObjLoadOptions();
options.enableMaterials = true;
scene.openFromBuffer(buffer, options);
console.log(`Loaded ${scene.rootNode.childNodes.length} root nodes`);Για δυαδικές μορφές (GLB, STL δυάρι, 3MF), η βιβλιοθήκη διαβάζει τα μαγικά byte από το buffer για να ανιχνεύσει αυτόματα τη μορφή, έτσι μπορείτε να περάσετε undefined Όπως το επιλογές επιχειρήσεων:
import { Scene } from '@aspose/3d';
import * as fs from 'fs';
const glbBuffer: Buffer = fs.readFileSync('model.glb');
const scene = new Scene();
scene.openFromBuffer(glbBuffer); // format auto-detected from GLB magic bytes
Κατεβάστε από το HTTP (Node.js 18+)
Κάντε ένα απομακρυσμένο περιουσιακό στοιχείο και φορτώστε το χωρίς να αγγίξετε το σύστημα αρχείων:
import { Scene } from '@aspose/3d';
async function loadFromUrl(url: string): Promise<Scene> {
const response = await fetch(url);
if (!response.ok) throw new Error(`HTTP ${response.status}`);
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const scene = new Scene();
scene.openFromBuffer(buffer);
return scene;
}
const scene = await loadFromUrl('https://example.com/model.glb');
console.log(`Loaded scene: ${scene.rootNode.childNodes.length} root nodes`);Ελέγξτε την φορτωμένη σκηνή
Μετά την φόρτιση, πηγαίνετε στο γραφείο σκηνής για να απαριθμήσετε τους κόμβους και να εντοπίσετε τη γεωμετρία:
import { Scene, Mesh, Node } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only; see FBX limitation note above
function inspect(node: Node, depth: number = 0): void {
const indent = ' '.repeat(depth);
const entityType = node.entity ? node.entity.constructor.name : '(none)';
console.log(`${indent}${node.name} [${entityType}]`);
if (node.entity instanceof Mesh) {
const mesh = node.entity as Mesh;
console.log(`${indent} vertices: ${mesh.controlPoints.length}, polygons: ${mesh.polygonCount}`);
}
for (const child of node.childNodes) {
inspect(child, depth + 1);
}
}
inspect(scene.rootNode);Διαβάστε το μετρητά περιουσιακών στοιχείων
Η assetInfo Η ιδιοκτησία εκθέτει μεταδεδομένα επίπεδου αρχείου:
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.fbx'); // ASCII FBX only
const info = scene.assetInfo;
if (info) {
console.log(`Creator: ${info.creator}`);
console.log(`Unit name: ${info.unitName}`);
console.log(`Unit scale: ${info.unitScaleFactor}`);
}Δεν είναι όλες οι μορφές πληθυσμού assetInfo.Το FBX και το COLLADA έχουν πλούσια μεταδεδομένα, τα OBJ και STL συνήθως δεν το κάνουν.
Ετικέτες: Συστάσεις φόρτισης ειδικά
| ΤΕΧΝΗ | ΕΠΙΛΟΓΕΣ ΚΛΑΔΑΣ | Ο δρόμος εισαγωγής | Κλειδιά επιλογών |
|---|---|---|---|
| OBJ | ObjLoadOptions | @aspose/3d/formats/obj | enableMaterials, flipCoordinateSystem, scale, normalizeNormal |
| ΓΚΛΤΦ | (δεν απαιτείται καμία) | N/A | Αυτόματη ανίχνευση, καλύπτει τόσο το δειγματοληψία GLB όσο και το JSON. |
| STL | StlLoadOptions | @aspose/3d/formats/stl | (δεν υπάρχουν επιλογές διαμόρφωσης στην τρέχουσα έκδοση) |
| FBX | FbxLoadOptions | @aspose/3d/formats/fbx | ASCII FBX μόνο; binary FBx δεν υποστηρίζεται. μη αυτόματα ανιχνεύεται — περάσει FbxLoadOptions ἀπὸ ἐκφάνεια. |
| COLLADA | ColladaLoadOptions | @aspose/3d/formats/collada | (δεν υπάρχουν επιλογές διαμόρφωσης στην τρέχουσα έκδοση) |
| 3MF | (δεν απαιτείται καμία) | N/A | Αυτοαποκαλύφθηκε |
Όλα τα μορφότυπα υποστηρίζουν την αυτο-αποκάλυψη από την επέκταση αρχείου. περάστε τις επιλογές που είναι ειδικές σε μορφή μόνο όταν χρειάζεστε μη προεπιλεγμένη συμπεριφορά.
Συχνές λάθη φορτίου
| Συμπτώματα | Αιτία | ΦΙΛΕΞΗ |
|---|---|---|
Error: Cannot find module '@aspose/3d/formats/obj' | moduleResolution Δεν θέτει σε node | Προσθέστε "moduleResolution": "node" Για να tsconfig.json |
| Λίστα κενών κόμβων μετά την φόρτωση OBJ | .mtl Απεβίβαση ή enableMaterials Δεν θέτει | ΣΕΤΙΔΑ options.enableMaterials = true και να εξασφαλίσει .mtl Είναι στο ίδιο κατάλογο |
Η σκηνή χτυπάει, αλλά rootNode.childNodes Είναι άδειο | Η μορφή χρησιμοποιεί ένα μόνο ρίζα, όχι παιδικά κόμβους | Πρόσβαση scene.rootNode.entity Αμέσως |
openFromBuffer Πυροβολισμοί με binary STL | Το Buffer έχει σκουπίσει λάθος (απόσπασε το μπάτ) | Χρησιμοποιήστε το πλήρες readFileSync() Εξαγωγή χωρίς σάρωση |
| Η σειρά των κλιπ κινουμένων σχεδίων είναι άδειο μετά την φόρτωση FBX | Το αρχείο FBX χρησιμοποιεί μετασχηματισμούς, όχι κλιπ | Η κινούμενη ταινία είναι πακέτο ανά πλαίσιο, η σειρά των κλιπ θα είναι άδειο |
| Το αρχείο FBX δεν φορτώνει ή παράγει κενή σκηνή | Το Binary FBX δεν υποστηρίζεται | Μετατρέψτε το σε ASCII FBX ή χρησιμοποιήστε τη GLTF/OBJ/STL αντί για αυτό. |
Δείτε επίσης
- Αποταμίευση 3D μοντέλων:• Επιλογές εξαγωγής και
saveToBuffer - Σκηνή Γκράφι:• Διασχίζοντας και τροποποιώντας τη ιεραρχία των κόμβων
- Πυροβολισμοί Overview:Όλες οι κατηγορίες και οι κατάλογοι
- Στήριξη μορφοποίησης:• Συνολική Ματρίκα Διαβάστε / Γράψτε