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

FormatExtensieCitireScriereClasă de formatObservații
Wavefront OBJ.objDaDaObjFormatCitește .mtl materiale; scrie .mtl lângă .obj
glTF 2.0.gltfDaDaGltfFormattext JSON + .bin sidecar
GLB.glbDaDaGltfFormatBinary glTF; set binaryMode = true
STL.stlDaDaStlFormatModuri binare și ASCII
3MF.3mfDaDaThreeMfFormat3D Manufacturing Format
FBX.fbxNu*Nu*FbxFormatImporter/exporter există, dar detectarea automată a formatului nu este conectată; nu este utilizabil prin scene.open()
COLLADA.daeDaDaColladaFormatNecesită 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țiuneTipImplicitEfect
enableMaterialsbooleantrueParsează .mtl fișierul referențiat de mtllib
flipCoordinateSystembooleanfalseInversează axele Y/Z pentru a se potrivi cu sistemele dreptășate
scalenumber1.0Scalare uniformă aplicată tuturor vârfurilor la încărcare
normalizeNormalbooleantrueNormalizează 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 .mtl fișierul material este scris automat alături de .obj fișier.
  • Utilizați GLB pentru livrarea pe web: formatul binar auto-conținut evită problemele CORS cu .bin sidecar-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.
  • xmldom este necesar pentru COLLADA: este instalat automat. Nu îl adăugați la peerDependencies sau încercați să îl eliminați; cititorul COLLADA îl apelează direct.

Probleme comune

SimptomCauză probabilăRemediere
Materialele OBJ sunt goale după încărcareenableMaterials nu este setatTrecere ObjLoadOptions cu enableMaterials = true
GLB produce un .bin sidecarbinaryMode setând implicit la falseSetează 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 XMLxmldom lipsă sau nepotrivireRulează npm install @aspose/3d din nou; xmldom este o dependență directă
Normalele STL se pierd în exportul ASCIIASCII STL elimină normalele pe fațăUtilizați binaryMode = true pentru ieșire ce păstrează normala

Vezi și

 Română