3D formatų palaikymas

Aspose.3D FOSS for TypeScript skaito ir rašo septynis pagrindinius 3D failų formatus. Formato aptikimas yra automatinis įkeliant: biblioteka tikrina dvejetainius magiškus skaičius, todėl jums nereikia nurodyti šaltinio formato. Formato specifinės parinkčių klasės importuojamos iš pakatalogių, esančių @aspose/3d paketo.

Palaikomi formatai

FormatasPlėtinysSkaitytiRašytiFormato klasėPastabos
Wavefront OBJ.objTaipTaipObjFormatSkaito .mtl medžiagas; rašo .mtl šalia .obj
glTF 2.0.gltfTaipTaipGltfFormatJSON tekstas + .bin sidecar
GLB.glbTaipTaipGltfFormatBinary glTF; nustatyta binaryMode = true
STL.stlTaipTaipStlFormatBinary ir ASCII režimai
3MF.3mfTaipTaipThreeMfFormat3D Manufacturing Format
FBX.fbxNe*Ne*FbxFormatImporter/exporter egzistuoja, bet formato automatinis aptikimas nėra sujungtas; neįmanoma naudoti per scene.open()
COLLADA.daeTaipTaipColladaFormatReikalauja xmldom (automatiškai įdiegta)

OBJ (Wavefront)

OBJ palaiko tiek importą, tiek eksportą in @aspose/3d. Kai išsaugoma kaip OBJ, medžiagų biblioteka (.mtl) automatiškai įrašoma kartu su .obj failu. Naudokite ObjLoadOptions norint valdyti medžiagų įkėlimą ir koordinatų sistemos elgseną.

Pagrindinės parinktys ObjLoadOptions:

ParinktisTipasNumatytaPoveikis
enableMaterialsbooleantrueAnalizuoti .mtl failą, į kurį nuoroda mtllib
flipCoordinateSystembooleanfalseApversti Y/Z ašis, kad atitiktų dešiniąją rankų sistemą
scalenumber1.0Vienodas mastelis, taikomas visiems viršūnėms įkeliant
normalizeNormalbooleantrueNormalizuoti viršūnių normalės iki vieneto ilgio
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)`);

Norėdami konvertuoti OBJ į bet kurį įrašomą formatą, įkelkite jį ir iškvieskite scene.save() su tikslinės formato klase.

glTF ir GLB

glTF 2.0 yra rekomenduojamas keitimosi formatas interneto ir žaidimų variklių naudojimui. Biblioteka naudoja tą patį GltfFormat klasę tiek .gltf (JSON + sidecar) ir .glb (binarinį, savarankišką) išvestį. Perjunkite tarp jų naudodami GltfSaveOptions.binaryMode.

Įkelti glTF arba 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

Eksportuoti kaip 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);

Eksportuoti kaip binarinį 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);

Naudoti binaryMode = true gamybos išteklių pristatymui. Vienas .glb užkraunamas greičiau naršyklėse ir varikliuose nei atskiras tekstinis + binarinis pora.

STL

STL yra trianguliuotas tinklo formatas, naudojamas CAD ir 3D spausdinime. Įvesties ir išvesties srityse palaikomi tiek binariniai, tiek ASCII STL. StlSaveOptions.binaryMode valdo, ar išvestis yra binarinė (kompaktiška) ar ASCII (žmogui skaitoma).

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 saugo tik trianguliuotą geometriją ir viršūnių normalės. Medžiagos ir UV duomenys STL formate nesaugomi.

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

Įspėjimas: FBX importavimo ir eksportavimo klasės (FbxImporter, FbxExporter) yra bibliotekoje, tačiau FBX formato automatinis aptikimas yra neprijungtas į scene.open() arba scene.save(). Kviečiant scene.open('file.fbx') nepaleis FBX importuotojo — failas bus nukreiptas į STL atsarginį variantą. scene.save('output.fbx', opts) nepaleis FBX eksportuotojo. Aukščiau pateikto formato palaikymo lentelėje FBX pažymėtas kaip No* dėl šios priežasties. Naudokite GLB arba COLLADA, kad gautumėte visiškai funkcinį importą ir eksportą per scene.open() / scene.save().

COLLADA (DAE)

COLLADA yra XML pagrindu veikiantis keitimosi formatas, palaikomas daugelio DCC įrankių (Blender, Maya, Cinema 4D). Biblioteka naudoja xmldom priklausomybę XML analizavimui; ji automatiškai įdiegiama kartu su 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 failai gali turėti vienetų mastelio metaduomenis (<unit> elementas). Biblioteka automatiškai taiko vienetų konversiją įkeliant.

Formato automatinis aptikimas

Įkeliant iš failo kelio, biblioteka bando nustatyti formatą pagal binarinius magiškus skaičius, prieš grįždama prie failo plėtinio. Tai reiškia, kad galite įkelti GLB failą, pavadintą .bin arba STL failą, pavadintą .model nespecifikuojant formato aiškiai.

Įkeliant iš a Buffer su scene.openFromBuffer(), magijos numerio aptikimas yra pagrindinis mechanizmas:

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)`);

Formatai su patikimais magijos numeriais: GLB (glTF), STL binarinis (80 baitų antraštė + trikampių skaičius), 3MF (ZIP magija PK). OBJ ir COLLADA yra tekstiniai ir yra aptinkami pagal failo plėtinį arba pagal perduodamą parametrų klasę.

Patarimai

  • OBJ palaiko tiek importą, tiek eksportą: kai išsaugoma kaip OBJ, .mtl medžiagos failas automatiškai rašomas šalia .obj failo.
  • Naudokite GLB interneto pristatymui: savarankiškas dvejetainis formatas išvengia CORS problemų su .bin šoninėmis programomis ir įkelia greičiau WebGL atvaizdavimuose.
  • Pateikite formatui specifines parinktis: bendras scene.open(path) veikia daugumai formatų, tačiau perduodant įkėlėjo parinkčių klasę įgalinama formatui specifinė elgsena, pvz., OBJ medžiagų įkėlimas arba STL koordinatų normalizavimas.
  • xmldom būtina COLLADA: ji įdiegiama automatiškai. Nepridėkite jos į peerDependencies arba bandykite ją pašalinti; COLLADA skaitytojas kviečia ją tiesiogiai.

Dažnos problemos

SimptomasTikėtina priežastisPataisyti
OBJ medžiagos po įkėlimo yra tuščiosenableMaterials nenustatytaPraeiti ObjLoadOptions su enableMaterials = true
GLB sukuria .bin sidecarbinaryMode numatoma falseNustatyti opts.binaryMode = true į GltfSaveOptions
scene.open() išmeta “nepalaikomas formatas”Failo plėtinys neatpažintasPateikite atitikmenį *LoadOptions klasė arba naudoti openFromBuffer()
COLLADA įkėlimas nepavyksta dėl XML klaidosxmldom trūksta arba neatitinkaVykdyti npm install @aspose/3d vėl; xmldom yra tiesioginė priklausomybė
STL normalės prarastos ASCII eksporteASCII STL neįrašo paviršiaus (kiekvieno veido) normalėsNaudokite binaryMode = true normales išsaugojančiai išvestiai

Žr. taip pat

 Lietuvių