Podrška za 3D formate
Aspose.3D FOSS za TypeScript čita i zapisuje sedam glavnih 3D formata datoteka. Detekcija formata je automatska pri učitavanju: biblioteka pregledava binarne magične brojeve pa nije potrebno navoditi izvorni format. Klase opcija specifičnih za format uvoze se iz pod‑putanja paketa @aspose/3d paketa.
Podržani formati
| Format | Ekstenzija | Čitanje | Pisanje | Klasa formata | Napomene |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Da | Da | ObjFormat | Čita .mtl materijale; zapisuje .mtl pored .obj |
| glTF 2.0 | .gltf | Da | Da | GltfFormat | JSON tekst + .bin sidecar |
| GLB | .glb | Da | Da | GltfFormat | Binarni glTF; postavljeno binaryMode = true |
| STL | .stl | Da | Da | StlFormat | Binarni i ASCII načini |
| 3MF | .3mf | Da | Da | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Ne* | Ne* | FbxFormat | Postoje uvoznik/izvoznik, ali automatsko otkrivanje formata nije implementirano; nije upotrebljivo putem scene.open() |
| COLLADA | .dae | Da | Da | ColladaFormat | Zahtijeva xmldom (automatski instalirano) |
OBJ (Wavefront)
OBJ podržava i uvoz i izvoz u @aspose/3d. Prilikom spremanja kao OBJ, biblioteka materijala (.mtl) se automatski zapisuje uz .obj datoteka. Upotrijebite ObjLoadOptions za kontrolu učitavanja materijala i ponašanja koordinatnog sustava.
Ključne opcije za ObjLoadOptions:
| Opcija | Tip | Zadano | Učinak |
|---|---|---|---|
enableMaterials | boolean | true | Parsiraj .mtl datoteku na koju se referira mtllib |
flipCoordinateSystem | boolean | false | Preokreni osi Y/Z kako bi odgovarale desnorukim sustavima |
scale | number | 1.0 | Jednolična skala primijenjena na sve vrhove pri učitavanju |
normalizeNormal | boolean | true | Normaliziraj normale vrhova na jedinicnu duljinu |
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)`);Za pretvorbu OBJ-a u bilo koji zapisivi format, učitaj ga i pozovi scene.save() s klasom ciljnog formata.
glTF and GLB
glTF 2.0 je preporučeni format za razmjenu u webu i korištenju u game engine-ima. Biblioteka koristi isti GltfFormat klasu za oba .gltf (JSON + sidecar) i .glb (binarni, samostalni) izlaz. Prebaci između njih pomoću GltfSaveOptions.binaryMode.
Učitaj glTF ili 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
Izvezi kao 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);Izvezi kao binarni 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);Koristi binaryMode = true za isporuku proizvodnih sredstava. Jedan .glb učitava se brže u preglednicima i motorima nego podijeljeni tekst + binarni par.
STL
STL je format triangulirane mreže koji se koristi u CAD-u i 3D ispisu. Podržani su i binarni i ASCII STL za unos i izlaz. StlSaveOptions.binaryMode kontrolira hoće li izlaz biti binaran (kompaktniji) ili ASCII (čovjeku čitljiv).
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 pohranjuje samo trianguliranu geometriju i normale vrhova. Materijal i UV podaci se ne čuvaju u STL-u.
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
Upozorenje: FBX uvoznici i izvoznici klase (FbxImporter, FbxExporter) postoje u biblioteci, ali automatsko otkrivanje FBX formata je nije povezano u scene.open() ili scene.save(). Pozivanje scene.open('file.fbx') neće pokrenuti FBX uvoznik — datoteka će pasti na STL rezervu. scene.save('output.fbx', opts) neće pokrenuti FBX izvoznik. Tablica podrške formata iznad označava FBX kao No* zbog toga. Koristite GLB ili COLLADA za potpuno funkcionalni uvoz i izvoz putem scene.open() / scene.save().
COLLADA (DAE)
COLLADA je XML‑bazirani format razmjene koji podržava širok spektar DCC alata (Blender, Maya, Cinema 4D). Biblioteka koristi xmldom ovisnost za parsiranje XML‑a; automatski se instalira uz 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 datoteke mogu sadržavati metapodatke o skaliranju jedinica (<unit> element). Biblioteka automatski primjenjuje konverziju jedinica prilikom učitavanja.
Automatsko otkrivanje formata
Pri učitavanju iz putanje datoteke, biblioteka pokušava otkriti format iz binarnih magičnih brojeva prije nego što se oslonci na ekstenziju datoteke. To znači da možete učitati GLB datoteku pod nazivom .bin ili STL datoteku pod nazivom .model bez eksplicitnog navođenja formata.
Pri učitavanju iz Buffer s scene.openFromBuffer(), otkrivanje magic broja je primarni mehanizam:
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)`);Formati s pouzdanim magic brojevima: GLB (glTF), STL binarni (80-bajtni zaglavlje + broj trokuta), 3MF (ZIP magic PK). OBJ i COLLADA su temeljeni na tekstu i otkrivaju se prema ekstenziji datoteke ili prema klasi opcija koju proslijedite.
Savjeti
- OBJ podržava i uvoz i izvoz: pri spremanju kao OBJ,
.mtldatoteka materijala se automatski zapisuje uz.objdatoteku. - Koristite GLB za web isporuku: samostalni binarni format izbjegava CORS probleme s
.binpratećim datotekama i učitava se brže u WebGL renderima. - Proslijedite opcije specifične za format: generičke
scene.open(path)radi za većinu formata, ali prosljeđivanje klase opcija učitača omogućuje ponašanje specifično za format, poput učitavanja materijala za OBJ ili normalizacije koordinata za STL. xmldomje potrebno za COLLADA: automatski se instalira. Nemojte ga dodavati upeerDependenciesili pokušajte ga ukloniti; čitač COLLADA ga poziva izravno.
Uobičajeni problemi
| Simptom | Vjerojatan uzrok | Ispravi |
|---|---|---|
| OBJ materijali su prazni nakon učitavanja | enableMaterials nije postavljeno | Prolaz ObjLoadOptions s enableMaterials = true |
GLB proizvodi .bin sidecar | binaryMode zadano na false | Postavi opts.binaryMode = true u GltfSaveOptions |
scene.open() baca “unsupported format” | Ekstenzija datoteke nije prepoznata | Proslijedi odgovarajući *LoadOptions klasu ili upotrijebi openFromBuffer() |
| Učitavanje COLLADA ne uspijeva s XML greškom | xmldom nedostaje ili ne odgovara | Pokreni npm install @aspose/3d ponovo; xmldom je izravna ovisnost |
| STL normali izgubljeni u ASCII izvozu | ASCII STL izostavlja normale po licu | Koristite binaryMode = true za izlaz koji očuva normale |
Vidi također
- Značajke i funkcionalnosti: graf scena, mreža, materijali, animacija i matematički API‑ji.
- Graf scena: izgradnja i obilazak stabla čvorova.
- Kako izgraditi 3D Mesh programatski