Suport pentru formate 3D
Aspose.3D FOSS pentru TypeScript citește și scrie șapte formate majore de fișiere 3D. Detectarea formatului este automată la încărcare: biblioteca inspectează numerele magice binare, astfel încât nu trebuie să specificați formatul sursă. Clasele de opțiuni specifice formatului sunt importate din sub‑cale ale pachetului @aspose/3d pachetului.
Formate acceptate
| Format | Extensie | Citire | Scriere | Clasă de format | Observații |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Da | Da | ObjFormat | Citește .mtl materiale; scrie .mtl lângă .obj |
| glTF 2.0 | .gltf | Da | Da | GltfFormat | text JSON + .bin sidecar |
| GLB | .glb | Da | Da | GltfFormat | Binary glTF; set binaryMode = true |
| STL | .stl | Da | Da | StlFormat | Moduri binare și ASCII |
| 3MF | .3mf | Da | Da | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Nu* | Nu* | FbxFormat | Importer/exporter există, dar detectarea automată a formatului nu este conectată; nu este utilizabil prin scene.open() |
| COLLADA | .dae | Da | Da | ColladaFormat | Necesită xmldom (instalat automat) |
OBJ (Wavefront)
OBJ acceptă atât importul, cât și exportul în @aspose/3d. Când se salvează ca OBJ, biblioteca de materiale (.mtl) este scrisă automat alături de .obj fișier. Utilizați ObjLoadOptions pentru a controla încărcarea materialelor și comportamentul sistemului de coordonate.
Opțiuni cheie pentru ObjLoadOptions:
| Opțiune | Tip | Implicit | Efect |
|---|---|---|---|
enableMaterials | boolean | true | Parsează .mtl fișierul referențiat de mtllib |
flipCoordinateSystem | boolean | false | Inversează axele Y/Z pentru a se potrivi cu sistemele dreptășate |
scale | number | 1.0 | Scalare uniformă aplicată tuturor vârfurilor la încărcare |
normalizeNormal | boolean | true | Normalizează normalele vârfurilor la lungime unitară |
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)`);Pentru a converti un OBJ în orice format scriibil, încarcă-l și apelează scene.save() cu clasa formatului țintă.
glTF și GLB
glTF 2.0 este formatul de interschimb recomandat pentru utilizarea pe web și în motoarele de jocuri. Biblioteca folosește același GltfFormat clasă pentru ambele .gltf (JSON + sidecar) și .glb (binar, auto-conținut) output. Comută între ele cu GltfSaveOptions.binaryMode.
Încărcați glTF sau 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
Exportă ca 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);Exportă ca GLB binar (.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);Folosește binaryMode = true pentru livrarea activelor în producție. Un singur .glb se încarcă mai repede în browsere și motoare decât perechea text + binar separată.
STL
STL este un format de plasă triunghiulară utilizat în CAD și imprimarea 3D. Atât STL binar, cât și STL ASCII sunt acceptate pentru intrare și ieșire. StlSaveOptions.binaryMode controlează dacă ieșirea este binară (compactă) sau ASCII (ușor de citit de către om).
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 stochează doar geometria triunghiulară și normele vârfurilor. Materialele și datele UV nu sunt păstrate în 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
Avertisment: clasele de import și export FBX (FbxImporter, FbxExporter) există în bibliotecă, dar detectarea automată a formatului FBX este neconectată în scene.open() sau scene.save(). Apelarea scene.open('file.fbx') nu va invoca importatorul FBX — fișierul va trece la fallback-ul STL. Apelarea scene.save('output.fbx', opts) nu va invoca exportatorul FBX. Tabelul de suport al formatelor de mai sus marchează FBX ca No* din acest motiv. Folosiți GLB sau COLLADA pentru import și export complet funcționale prin scene.open() / scene.save().
COLLADA (DAE)
COLLADA este un format de schimb bazat pe XML, susținut de o gamă largă de instrumente DCC (Blender, Maya, Cinema 4D). Biblioteca folosește xmldom dependența pentru parsarea XML; este instalată automat cu 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);Fișierele COLLADA pot conține metadate de scalare a unității (<unit> element). Biblioteca aplică conversia unității automat la încărcare.
Detectare automată a formatului
Când se încarcă dintr-o cale de fișier, biblioteca încearcă detectarea formatului din numere magice binare înainte de a recurge la extensia fișierului. Aceasta înseamnă că poți încărca un fișier GLB numit .bin sau un fișier STL numit .model fără a specifica explicit formatul.
Când se încarcă dintr-un Buffer cu scene.openFromBuffer(), detectarea prin număr magic este mecanismul principal:
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)`);Formate cu numere magice fiabile: GLB (glTF), STL binar (antet de 80‑byte + număr de triunghiuri), 3MF (ZIP magic PK). OBJ și COLLADA sunt bazate pe text și sunt detectate din extensia fișierului sau prin clasa de opțiuni pe care o furnizați.
Sfaturi
- OBJ suportă atât importul, cât și exportul: când se salvează ca OBJ, fișierul
.mtlfișierul material este scris automat alături de.objfișier. - Utilizați GLB pentru livrarea pe web: formatul binar auto-conținut evită problemele CORS cu
.binsidecar-urile și se încarcă mai rapid în randatoarele WebGL. - Transmiteți opțiuni specifice formatului: generic
scene.open(path)funcționează pentru majoritatea formatelor, dar transmiterea clasei de opțiuni ale încărcătorului permite comportament specific formatului, cum ar fi încărcarea materialelor OBJ sau normalizarea coordonatelor STL. xmldomeste necesar pentru COLLADA: este instalat automat. Nu îl adăugați lapeerDependenciessau încercați să îl eliminați; cititorul COLLADA îl apelează direct.
Probleme comune
| Simptom | Cauză probabilă | Remediere |
|---|---|---|
| Materialele OBJ sunt goale după încărcare | enableMaterials nu este setat | Trecere ObjLoadOptions cu enableMaterials = true |
GLB produce un .bin sidecar | binaryMode setând implicit la false | Setează opts.binaryMode = true în GltfSaveOptions |
scene.open() aruncă “format nesuportat” | Extensia fișierului nu este recunoscută | Transmite potrivirea *LoadOptions clasă sau utilizare openFromBuffer() |
| Încărcarea COLLADA eșuează cu eroare XML | xmldom lipsă sau nepotrivire | Rulează npm install @aspose/3d din nou; xmldom este o dependență directă |
| Normalele STL se pierd în exportul ASCII | ASCII STL elimină normalele pe față | Utilizați binaryMode = true pentru ieșire ce păstrează normala |
Vezi și
- Caracteristici și funcționalități: graf de scenă, plasă, materiale, animație și API-uri de matematică.
- Graf de scenă: construirea și parcurgerea arborelui de noduri.
- Cum să construiești un Mesh 3D programatic