Поддръжка на 3D формати
Aspose.3D FOSS за TypeScript чете и записва седем основни 3D файлови формата. Откриването на формата е автоматично при зареждане: библиотеката проверява бинарните магически числа, така че не е необходимо да посочвате изходния формат. Класовете с опции, специфични за формата, се импортират от подпътеки на @aspose/3d пакет.
Поддържани формати
| Формат | Разширение | Четене | Запис | Клас на формата | Бележки |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Да | Да | ObjFormat | Чете .mtl материали; записва .mtl заедно с .obj |
| glTF 2.0 | .gltf | Да | Да | GltfFormat | JSON текст + .bin sidecar |
| GLB | .glb | Да | Да | GltfFormat | Binary glTF; набор binaryMode = true |
| STL | .stl | Да | Да | StlFormat | Бинарни и ASCII режими |
| 3MF | .3mf | Да | Да | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Не* | Не* | FbxFormat | Импортер/експортер съществуват, но автоматичното разпознаване на формата не е свързано; не е използваемо чрез scene.open() |
| COLLADA | .dae | Да | Да | ColladaFormat | Изисква xmldom (автоматично инсталирано) |
OBJ (Wavefront)
OBJ поддържа както импортиране, така и експортиране в @aspose/3d. При запазване като OBJ, библиотеката с материали (.mtl) се записва автоматично заедно с .obj файла. Използвайте ObjLoadOptions за контролиране на зареждането на материали и поведението на координатната система.
Ключови опции за ObjLoadOptions:
| Опция | Тип | По подразбиране | Ефект |
|---|---|---|---|
enableMaterials | boolean | true | Анализирай .mtl файл, посочен от mtllib |
flipCoordinateSystem | boolean | false | Обръщане на осите Y/Z, за да съответстват на деснични системи |
scale | number | 1.0 | Униформен мащаб, приложен към всички върхове при зареждане |
normalizeNormal | boolean | true | Нормализирайте нормалите на върховете до единична дължина |
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)`);За да конвертирате OBJ във всеки записваем формат, заредете го и извикайте scene.save() със класа на целевия формат.
glTF и GLB
glTF 2.0 е препоръчителният формат за обмен за уеб и използване в игрови енджини. Библиотеката използва същия GltfFormat клас за двете .gltf (JSON + sidecar) и .glb (бинарен, самостоятелен) изход. Превключвайте между тях с GltfSaveOptions.binaryMode.
Заредете glTF или 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
Експортиране като 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);Експортиране като бинарен 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);Използвайте binaryMode = true за доставка на активи в продукция. Един .glb зарежда по-бързо в браузъри и енджини, отколкото разделеният текст + бинарен чифт.
STL
STL е триангулиран мрежов формат, използван в CAD и 3D печат. Поддържат се както бинарен, така и ASCII STL за вход и изход. StlSaveOptions.binaryMode контролира дали изходът е бинарен (компактен) или ASCII (четим за хора).
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 съхранява само триъгълна геометрия и нормали на върховете. Материалните и UV данни не се запазват в 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
Внимание: FBX импортер и експортер класове (FbxImporter, FbxExporter) съществуват в библиотеката, но автоматичното разпознаване на FBX формат е не е свързано в scene.open() или scene.save(). Извикване scene.open('file.fbx') няма да задейства FBX импортера — файлът ще премине към резервния STL. Извикване scene.save('output.fbx', opts) няма да задейства FBX експортер. Таблицата за поддръжка на формати по-горе маркира FBX като No* по тази причина. Използвайте GLB или COLLADA за напълно функционален импорт и експорт чрез scene.open() / scene.save().
COLLADA (DAE)
COLLADA е XML-базиран формат за обмен, поддържан от широк набор от DCC инструменти (Blender, Maya, Cinema 4D). Библиотеката използва the xmldom зависимост за XML парсинг; тя се инсталира автоматично с 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 могат да съдържат метаданни за мащабиране на единици (<unit> елемент). Библиотеката прилага автоматично конверсия на единици при зареждане.
Автоматично разпознаване на формат
При зареждане от път към файл, библиотеката се опитва да открие формата чрез бинарни магически числа, преди да се върне към разширението на файла. Това означава, че можете да заредите GLB файл, наречен .bin или STL файл, наречен .model без да посочвате формата изрично.
При зареждане от a Buffer с scene.openFromBuffer(), откриването на магически номер е основният механизъм:
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)`);Формати с надеждни магически номера: GLB (glTF), STL бинарен (80-byte header + triangle count), 3MF (ZIP магически PK). OBJ и COLLADA са текстови и се откриват от разширението на файла или от класа с опции, който предавате.
Съвети
- OBJ поддържа както импортиране, така и експортиране: при запазване като OBJ, the
.mtlматериалният файл се записва автоматично до the.objфайл. - Използвайте GLB за уеб доставка: самостоятелният двоичен формат избягва проблеми с CORS при
.binстранични файлове и се зарежда по-бързо в WebGL рендеръри. - Предайте опции, специфични за формата: общ
scene.open(path)работи за повечето формати, но предаването на класа с опции за зареждане позволява поведение, специфично за формата, като зареждане на материали за OBJ или нормализация на координати за STL. xmldomе задължително за COLLADA: се инсталира автоматично. Не я добавяйте къмpeerDependenciesor try to remove it; the COLLADA reader calls it directly. : или се опитайте да го премахнете; читателят на COLLADA го извиква директно.
Чести проблеми
| Symptom : Симптом | Likely Cause : Вероятна причина | Fix : Поправка |
|---|---|---|
| OBJ materials are empty after load : Материалите на OBJ са празни след зареждане | enableMaterials not set : не е зададено | Pass : Преминаване ObjLoadOptions с enableMaterials = true |
GLB произвежда .bin sidecar | binaryMode по подразбиране false | Задай opts.binaryMode = true в GltfSaveOptions |
scene.open() хвърля “unsupported format” | Разширението на файла не е разпознато | Предайте съвпадащото *LoadOptions клас или използвайте openFromBuffer() |
| Зареждането на COLLADA се проваля с XML грешка | xmldom липсващ или несъответстващ | Изпълнете npm install @aspose/3d отново; xmldom е пряка зависимост |
| STL нормалите се губят при ASCII експортиране | ASCII STL пропуска нормалите за всяко лице | Използвайте binaryMode = true за изход, запазващ нормалите |
Вижте също
- Характеристики и функционалности: scene graph, mesh, materials, animation и math APIs.
- Граф на сцената: създаване и обхождане на дървото от възли.
- Как да създадем 3D мрежа програмно