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
| Formatas | Plėtinys | Skaityti | Rašyti | Formato klasė | Pastabos |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Taip | Taip | ObjFormat | Skaito .mtl medžiagas; rašo .mtl šalia .obj |
| glTF 2.0 | .gltf | Taip | Taip | GltfFormat | JSON tekstas + .bin sidecar |
| GLB | .glb | Taip | Taip | GltfFormat | Binary glTF; nustatyta binaryMode = true |
| STL | .stl | Taip | Taip | StlFormat | Binary ir ASCII režimai |
| 3MF | .3mf | Taip | Taip | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Ne* | Ne* | FbxFormat | Importer/exporter egzistuoja, bet formato automatinis aptikimas nėra sujungtas; neįmanoma naudoti per scene.open() |
| COLLADA | .dae | Taip | Taip | ColladaFormat | Reikalauja 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:
| Parinktis | Tipas | Numatyta | Poveikis |
|---|---|---|---|
enableMaterials | boolean | true | Analizuoti .mtl failą, į kurį nuoroda mtllib |
flipCoordinateSystem | boolean | false | Apversti Y/Z ašis, kad atitiktų dešiniąją rankų sistemą |
scale | number | 1.0 | Vienodas mastelis, taikomas visiems viršūnėms įkeliant |
normalizeNormal | boolean | true | Normalizuoti 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,
.mtlmedžiagos failas automatiškai rašomas šalia.objfailo. - 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. xmldombūtina COLLADA: ji įdiegiama automatiškai. Nepridėkite jos įpeerDependenciesarba bandykite ją pašalinti; COLLADA skaitytojas kviečia ją tiesiogiai.
Dažnos problemos
| Simptomas | Tikėtina priežastis | Pataisyti |
|---|---|---|
| OBJ medžiagos po įkėlimo yra tuščios | enableMaterials nenustatyta | Praeiti ObjLoadOptions su enableMaterials = true |
GLB sukuria .bin sidecar | binaryMode numatoma false | Nustatyti opts.binaryMode = true į GltfSaveOptions |
scene.open() išmeta “nepalaikomas formatas” | Failo plėtinys neatpažintas | Pateikite atitikmenį *LoadOptions klasė arba naudoti openFromBuffer() |
| COLLADA įkėlimas nepavyksta dėl XML klaidos | xmldom trūksta arba neatitinka | Vykdyti npm install @aspose/3d vėl; xmldom yra tiesioginė priklausomybė |
| STL normalės prarastos ASCII eksporte | ASCII STL neįrašo paviršiaus (kiekvieno veido) normalės | Naudokite binaryMode = true normales išsaugojančiai išvestiai |
Žr. taip pat
- Savybės ir funkcionalumas: scene graph, mesh, materials, animation, ir math APIs.
- Scenos grafas: mazgų medžio kūrimas ir naršymas.
- Kaip programiškai sukurti 3D Mesh.