Node.js developers working with 3D content frequently need to convert between formats: a design tool exports OBJ, a web renderer expects GLB, a 3D printer requires STL, and a manufacturing pipeline uses 3MF. Handling these conversions with a single, consistent API reduces the number of external tools in a pipeline and keeps conversion logic inside the application code where it can be tested and versioned.

Pengelolaan @aspose/3d paket (v24.12.0, lisensi MIT) menyediakan API TypeScript-first untuk membaca dan menulis semua format 3D utama di Node.js. Panduan ini berjalan melalui alur kerja konversi yang paling umum.

Instalasi

asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.

Persyaratan: Node.js 18, 20, atau 22; TypeScript 5.0 atau lebih baru. Satu-satunya ketergantungan runtime adalah xmldom.

Format yang Didhukung

Tabel di bawah ini mencantumkan format yang dibahas dalam panduan ini dan dukungan membaca/menulisnya.

Format (Inggris)PerpanjanganBacalah.MenulisCatatan
OBJ.objYa, aku tahu.Ya, aku tahu.Membaca/menulis .mtl file materiil
glTF (Penggunaan).gltf, .glbYa, aku tahu.Ya, aku tahu..gltf adalah format JSON; .glb adalah biner mandiri
STL.stlYa, aku tahu.Ya, aku tahu.Format pencetakan 3D standar; biner dan ASCII
3MF.3mfYa, aku tahu.Ya, aku tahu.Format pembuatan dengan metadata yang kaya
FBX.fbxTidak*Tidak*Impor/ekspor ada tetapi deteksi otomatis format tidak terpasang; tidak dapat digunakan melalui scene.open()
COLLADA.daeYa, aku tahu.Ya, aku tahu.Format pertukaran berbasis XML

OBJ mendukung impor dan ekspor. scene.open() dan menyimpan dengan scene.save('output.obj'), atau mengkonversi ke format yang didukung lainnya seperti glTF, STL, atau 3MF.

OBJ ke GLB (Web Delivery)

Konversi OBJ ke glTF biner (GLB) adalah alur kerja web yang paling umum. GLB adalah bundel bineri mandiri: tekstur, geometri, dan metadata dalam satu file, yang membuatnya efisien untuk pengiriman HTTP dan pemuatan langsung oleh Three.js, Babylon. js, and model-viewer .

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

Format output disimpulkan dari ekstensi file. Use .glb untuk GLB biner atau .gltf untuk JSON + terpisah .bin tata letak.

OBJ ke STL (3D Printing Prep)

STL adalah bahasa franca dari pencetakan 3D FDM dan SLA. Pemotong seperti PrusaSlicer, Bambu Studio, dan Chitubox semua menerima ST L Konversi dari OBJ ke STl mudah karena kedua format menyimpan mesh segitiga.

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 tidak menyimpan data warna, material, atau UV. Jika file OBJ Anda menggunakan kelompok bahan, informasi itu tersingkir selama ekspor. Untuk format cetak yang mempertahankan warna , pertimbangkan 3MF sebagai gantinya (lihat di bawah).

STL ke glTF (Scanner dan CAD ke Web)

Pemindai cahaya terstruktur dan eksportir CAD parameter biasanya output STL. Konversi ke glTF membuat geometri dapat diakses di pemirsa berbasis web dan platform AR tanpa langkah rendering sisi server.

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

Karena STL tidak membawa informasi materi atau tekstur, file glTF yang dihasilkan hanya akan berisi geometri. Anda dapat menempelkan bahan secara programatis ke node adegan setelah loading jika diperlukan.

3MF to glTF (Manufacturing to Visualization)

Format Manufaktur 3D (3MF) semakin banyak digunakan dalam alur kerja manufaktur aditif karena menyimpan warna, bahan, pohon komponen, dan metadata cetak di samping geometri. Konversi 3M F ke glTF memungkinkan visualisasi hilir dalam alat web sambil melestarikan struktur adegan .

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() mempertahankan hierarki komponen dalam scene.rootNode.childNodes, sehingga Anda dapat memeriksa atau memanipulasi bagian-bagian individu sebelum menyimpan.

Pola Konversi Batch

Saat memproses direktori file, bungkus setiap konversi dalam sebuah folder. try/catch sehingga file yang rusak tidak dapat membatalkan seluruh batch.

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

Pola di atas membaca setiap ekstensi file yang didukung dari direktori input, mengkonversi ke GLB, dan mencatat kegagalan tanpa menghentikan loop. Array yang dikembalikan dari ConversionResult objek dapat digunakan untuk pelaporan atau logika retry.

Kesimpulan

@aspose/3d mencakup seluruh kebutuhan konversi format dalam aplikasi Node.js TypeScript dengan API dua langkah yang konsisten: scene.open() untuk memuat, scene.save() kendala utama untuk diingat adalah bahwa FBX importir dan eksportir kelas ada tetapi format otomatis deteksi belum kabel, sehingga file FBx tidak dapat dimuat melalui scene.open().

Untuk lebih detail tentang Scene, Node, dan Mesh kelas yang digunakan dalam contoh-contoh ini, lihat halaman referensi kelas di dokumentasi ini.