Node.js разработчиците, работещи с 3D съдържание често трябва да конвертират между формати: дизайн инструмент изнася OBJ, уеб рендера очаква GLB, 3Д принтер изисква STL и производствена тръба използва 3MF. Преработване на тези конструиране с един, последователен API намалява броя на външните инструменти в тръбата и поддържа логиката на конвръзката вътре в кода на приложението, където може да бъде тестван и версиран.
и на @aspose/3d пакета (v24.12.0, MIT лиценз) осигурява API TypeScript за четене и писане на всички основни 3D формати в Node.js. Този ръководство преминава през най-честите конвертирани работни потоци.
инсталация
npm install @aspose/3d
Изисквания: Node.js 18, 20 или 22; TypeScript 5.0 или по-късно. xmldom.
Подкрепени формати
Таблицата по-долу представя форматите, покрити в този ръководство и тяхната подкрепа за четене/писан.
| Форматът | Разширяване | Прочетете | Писане | бележки |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | Прочети / писания .mtl Материални файлове |
| ГЛТФ | .gltf, .glb | Да | Да | .gltf е JSON формат; .glb Самоконтейнерна бинарна система |
| STL | .stl | Да | Да | 3D формат за печат: ASCII и бинарни |
| 3MF | .3mf | Да | Да | Изграждане на богата метаданна |
| FBX | .fbx | Не * | Не * | Вносител/експортер съществува, но форматът на автоматично откриване не е вграден; не може да се използва чрез scene.open() |
| COLLADA | .dae | Да | Да | XML формат за обмен на данни |
OBJ поддържа както внос, така и износ. scene.open() и спасяват с scene.save('output.obj'),или конвертирате към друг поддържан формат като glTF, STL или 3MF.
OBJ до GLB (Web Delivery)
Конвертирането на OBJ в бинарни glTF (GLB) е най-често срещаният уеб работен поток. GLB е самостоятелно съдържаща се двоична пакета: текстури, геометрия и метаданни в един файл, което го прави ефективен за HTTP доставка и директна зареждане от Three.js, Babylon.js и модел-вийър.
import { Scene } from '@aspose/3d';
function convertObjToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`Converted ${inputPath} -> ${outputPath}`);
}
convertObjToGlb('model.obj', 'model.glb');
Форматът на изхода се вписва от разширяването на файла. .glb за бинарни GLB или .gltf за отделен JSON + .bin и лайкът.
OBJ до STL (3D препиране)
STL е lingua franca на FDM и SLA 3D печат. Слайдър като PrusaSlicer, Bambu Studio и Chitubox всички приемат STl. Конвертирането от OBJ до ST L е просто, защото двата формата съхраняват триъгълни мешки.
import { Scene } from '@aspose/3d';
function convertObjToStl(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.stl' selects STL format
console.log(`STL written to ${outputPath}`);
}
convertObjToStl('part.obj', 'part.stl');
STL не съхранява цветове, материали или UV данни. Ако вашият OBJ файл използва групи от материали, тази информация се изхвърля по време на експорта. За формати за печат с запазване на цвета, помислете 3MF вместо (виж по-долу).
STL до glTF (сканер и CAD към уеб)
Структурирани сканери за светлина и параметрични CAD експортери обикновено произвеждат STL. Конвертирането в glTF прави геометрията достъпна на уеб базирани зрители и AR платформи без стъпка на сървър-странично представяне.
import { Scene } from '@aspose/3d';
function convertStlToGltf(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
// extension '.gltf' saves as JSON + .bin sidecar
scene.save(outputPath);
console.log(`glTF written to ${outputPath}`);
}
convertStlToGltf('scan_output.stl', 'scan_output.gltf');
Тъй като STL не носи никаква информация за материал или текстура, резултатът от GSTF файл ще съдържа само геометрия. можете да прикрепите материалите програмирано към сценичните възли след зареждане, ако е необходимо.
3MF to glTF (Manufacturing to Visualization)
3D Форматът за производство (3MF) се използва все повече в добавките на производствените работни потоци, защото съхранява цветове, материали, компонентни дървета и печат метаданни заедно с геометрията. Конвертирането на 3MФ към glTF позволява визуализиране надолу в уеб инструменти, като същевременно запазва сцената структура.
import { Scene } from '@aspose/3d';
function convert3mfToGlb(inputPath: string, outputPath: string): void {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' selects binary GLB format
console.log(`3MF -> GLB: ${outputPath}`);
}
convert3mfToGlb('assembly.3mf', 'assembly.glb');
3MF files often contain multi-component assemblies. The scene graph produced by scene.open() Съдържа иерархията на съставните елементи в scene.rootNode.childNodes, така че можете да проверявате или манипулирате отделните части преди да спестите.
Бач конвертиране модел
При обработката на директория от файлове, вградете всяка конверсия в try/catch За да може един корумпиран файл да не аботира цялата група.
import { Scene } from '@aspose/3d';
import { readdirSync } from 'fs';
import { join, basename, extname } from 'path';
interface ConversionResult {
input: string;
output: string;
success: boolean;
error?: string;
}
function batchConvertToGlb(
inputDir: string,
outputDir: string,
extensions: string[] = ['.obj', '.stl', '.3mf', '.dae'] // .fbx excluded: format auto-detection not wired
): ConversionResult[] {
const results: ConversionResult[] = [];
const files = readdirSync(inputDir).filter((f) =>
extensions.includes(extname(f).toLowerCase())
);
for (const file of files) {
const inputPath = join(inputDir, file);
const outputPath = join(outputDir, basename(file, extname(file)) + '.glb');
try {
const scene = new Scene();
scene.open(inputPath);
scene.save(outputPath); // extension '.glb' infers GLB format
results.push({ input: inputPath, output: outputPath, success: true });
} catch (err) {
const message = err instanceof Error ? err.message : String(err);
results.push({ input: inputPath, output: outputPath, success: false, error: message });
console.error(`Failed to convert ${file}: ${message}`);
}
}
const succeeded = results.filter((r) => r.success).length;
console.log(`Batch complete: ${succeeded}/${results.length} files converted.`);
return results;
}
// Usage
batchConvertToGlb('./input', './output');
Изглежда, че шаблонът по-горе прочете всяко поддържано разширение на файла от директория за вход, конвертира се към GLB и записва всички пропуски без да спира кръга. ConversionResult Те могат да се използват за отчитане или логика на ретри.
заключението
@aspose/3d покрива целия спектър от форматиране нужди в Node.js TypeScript приложение с последователна двустепенна API: scene.open() за да се натоварва, scene.save() Ключовото ограничение да запомните е, че FBX вносител и износители класове съществуват, но форматът за автоматично откриване все още не е накърнена, така че файловете FB X не могат да бъдат заредени чрез scene.open().
За повече подробности за Scene, Node,и Mesh класове, използвани в тези примери, вижте референтните страници за класовете в тази документация.