Dukungan Format 3D

Aspose.3D FOSS untuk TypeScript membaca dan menulis tujuh format file 3D utama. Deteksi format bersifat otomatis saat memuat: perpustakaan memeriksa nomor ajaib biner sehingga Anda tidak perlu menentukan format sumber. Kelas opsi khusus format diimpor dari sub‑path paket. @aspose/3d paket.

Format yang Didukung

FormatEkstensiBacaTulisKelas FormatCatatan
Wavefront OBJ.objYaYaObjFormatMembaca .mtl material; menulis .mtl bersamaan dengan .obj
glTF 2.0.gltfYaYaGltfFormatteks JSON + .bin sidecar
GLB.glbYaYaGltfFormatBiner glTF; set binaryMode = true
STL.stlYaYaStlFormatMode biner dan ASCII
3MF.3mfYaYaThreeMfFormat3D Manufacturing Format
FBX.fbxTidak*Tidak*FbxFormatImporter/exporter ada tetapi deteksi otomatis format tidak terhubung; tidak dapat digunakan melalui scene.open()
COLLADA.daeYaYaColladaFormatMembutuhkan xmldom (auto-terpasang)

OBJ (Wavefront)

OBJ mendukung baik impor maupun ekspor dalam @aspose/3d. Saat menyimpan sebagai OBJ, perpustakaan material (.mtl) ditulis secara otomatis bersamaan dengan .obj file. Gunakan ObjLoadOptions untuk mengontrol pemuatan material dan perilaku sistem koordinat.

Opsi utama untuk ObjLoadOptions:

OpsiTipeBawaanEfek
enableMaterialsbooleantrueMengurai .mtl berkas yang direferensikan oleh mtllib
flipCoordinateSystembooleanfalseBalik sumbu Y/Z untuk menyesuaikan sistem tangan kanan
scalenumber1.0Skala seragam diterapkan pada semua verteks saat dimuat
normalizeNormalbooleantrueNormalisasi normal verteks menjadi panjang satu
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)`);

Untuk mengonversi OBJ ke format yang dapat ditulis, muat terlebih dahulu dan panggil scene.save() dengan kelas format target.

glTF dan GLB

glTF 2.0 adalah format pertukaran yang direkomendasikan untuk penggunaan web dan mesin game. Perpustakaan ini menggunakan GltfFormat kelas untuk keduanya .gltf (JSON + sidecar) dan .glb (biner, mandiri) output. Beralih di antara keduanya dengan GltfSaveOptions.binaryMode.

Muat glTF atau 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

Ekspor sebagai 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);

Ekspor sebagai GLB biner (.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);

Gunakan binaryMode = true untuk pengiriman aset produksi. Sebuah .glb memuat lebih cepat di peramban dan mesin daripada pasangan teks + binary yang terpisah.

STL

STL adalah format mesh segitiga yang digunakan dalam CAD dan pencetakan 3D. Baik STL biner maupun ASCII didukung untuk input dan output. StlSaveOptions.binaryMode mengontrol apakah output berupa biner (kompak) atau ASCII (dapat dibaca manusia).

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 hanya menyimpan geometri segitiga dan normal vertex. Material serta data UV tidak dipertahankan dalam 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

Peringatan: kelas pengimpor dan pengekspor FBX (FbxImporter, FbxExporter) ada dalam pustaka, tetapi deteksi otomatis format FBX tidak terhubung ke scene.open() atau scene.save(). Memanggil scene.open('file.fbx') tidak akan memanggil pengimpor FBX — file akan beralih ke fallback STL. Memanggil scene.save('output.fbx', opts) tidak akan memanggil pengekspor FBX. Tabel dukungan format di atas menandai FBX sebagai No* untuk alasan ini. Gunakan GLB atau COLLADA untuk impor dan ekspor yang berfungsi penuh melalui scene.open() / scene.save().

COLLADA (DAE)

COLLADA adalah format pertukaran berbasis XML yang didukung oleh berbagai alat DCC (Blender, Maya, Cinema 4D). Pustaka menggunakan xmldom dependensi untuk parsing XML; ia dipasang secara otomatis dengan 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);

File COLLADA dapat berisi metadata skala unit (<unit> elemen). Pustaka menerapkan konversi unit secara otomatis saat memuat.

Deteksi Otomatis Format

Saat memuat dari jalur file, perpustakaan mencoba mendeteksi format dari binary magic numbers sebelum kembali ke ekstensi file. Ini berarti Anda dapat memuat file GLB bernama .bin atau file STL bernama .model tanpa harus menyebutkan format secara eksplisit.

Saat memuat dari sebuah Buffer dengan scene.openFromBuffer(), deteksi magic-number adalah mekanisme utama:

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

Format dengan magic number yang dapat diandalkan: GLB (glTF), STL biner (header 80-byte + jumlah segitiga), 3MF (ZIP magic PK). OBJ dan COLLADA berbasis teks dan dideteksi dari ekstensi file atau oleh kelas opsi yang Anda berikan.

Tips

  • OBJ mendukung impor dan ekspor: saat menyimpan sebagai OBJ, file .mtl material ditulis secara otomatis bersamaan dengan .obj file.
  • Gunakan GLB untuk pengiriman web: format biner yang berdiri sendiri menghindari masalah CORS dengan .bin sidecar dan memuat lebih cepat di renderer WebGL.
  • Berikan opsi khusus format: umum scene.open(path) bekerja untuk kebanyakan format, tetapi memberikan kelas opsi loader memungkinkan perilaku khusus format seperti pemuatan material OBJ atau normalisasi koordinat STL.
  • xmldom diperlukan untuk COLLADA: itu dipasang secara otomatis. Jangan menambahkannya ke peerDependencies atau coba menghapusnya; pembaca COLLADA memanggilnya secara langsung.

Masalah Umum

GejalaPenyebab KemungkinanPerbaiki
Material OBJ kosong setelah dimuatenableMaterials tidak disetelLewati ObjLoadOptions dengan enableMaterials = true
GLB menghasilkan sebuah .bin sidecarbinaryMode menggunakan default falseAtur opts.binaryMode = true di GltfSaveOptions
scene.open() menghasilkan “unsupported format”Ekstensi file tidak dikenaliLewati yang cocok *LoadOptions kelas atau gunakan openFromBuffer()
Pemuatan COLLADA gagal dengan kesalahan XMLxmldom hilang atau tidak cocokJalankan npm install @aspose/3d lagi; xmldom adalah ketergantungan langsung
Normal STL hilang dalam ekspor ASCIIASCII STL menghilangkan normal per-wajahGunakan binaryMode = true untuk output yang mempertahankan normal

Lihat Juga

 Bahasa Indonesia