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

FormatEkstenzijaČitanjePisanjeKlasa formataNapomene
Wavefront OBJ.objDaDaObjFormatČita .mtl materijale; zapisuje .mtl pored .obj
glTF 2.0.gltfDaDaGltfFormatJSON tekst + .bin sidecar
GLB.glbDaDaGltfFormatBinarni glTF; postavljeno binaryMode = true
STL.stlDaDaStlFormatBinarni i ASCII načini
3MF.3mfDaDaThreeMfFormat3D Manufacturing Format
FBX.fbxNe*Ne*FbxFormatPostoje uvoznik/izvoznik, ali automatsko otkrivanje formata nije implementirano; nije upotrebljivo putem scene.open()
COLLADA.daeDaDaColladaFormatZahtijeva 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:

OpcijaTipZadanoUčinak
enableMaterialsbooleantrueParsiraj .mtl datoteku na koju se referira mtllib
flipCoordinateSystembooleanfalsePreokreni osi Y/Z kako bi odgovarale desnorukim sustavima
scalenumber1.0Jednolična skala primijenjena na sve vrhove pri učitavanju
normalizeNormalbooleantrueNormaliziraj 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, .mtl datoteka materijala se automatski zapisuje uz .obj datoteku.
  • Koristite GLB za web isporuku: samostalni binarni format izbjegava CORS probleme s .bin prateć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.
  • xmldom je potrebno za COLLADA: automatski se instalira. Nemojte ga dodavati u peerDependencies ili pokušajte ga ukloniti; čitač COLLADA ga poziva izravno.

Uobičajeni problemi

SimptomVjerojatan uzrokIspravi
OBJ materijali su prazni nakon učitavanjaenableMaterials nije postavljenoProlaz ObjLoadOptions s enableMaterials = true
GLB proizvodi .bin sidecarbinaryMode zadano na falsePostavi opts.binaryMode = true u GltfSaveOptions
scene.open() baca “unsupported format”Ekstenzija datoteke nije prepoznataProslijedi odgovarajući *LoadOptions klasu ili upotrijebi openFromBuffer()
Učitavanje COLLADA ne uspijeva s XML greškomxmldom nedostaje ili ne odgovaraPokreni npm install @aspose/3d ponovo; xmldom je izravna ovisnost
STL normali izgubljeni u ASCII izvozuASCII STL izostavlja normale po licuKoristite binaryMode = true za izlaz koji očuva normale

Vidi također

 Hrvatski