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
| Format | Ekstensi | Baca | Tulis | Kelas Format | Catatan |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Ya | Ya | ObjFormat | Membaca .mtl material; menulis .mtl bersamaan dengan .obj |
| glTF 2.0 | .gltf | Ya | Ya | GltfFormat | teks JSON + .bin sidecar |
| GLB | .glb | Ya | Ya | GltfFormat | Biner glTF; set binaryMode = true |
| STL | .stl | Ya | Ya | StlFormat | Mode biner dan ASCII |
| 3MF | .3mf | Ya | Ya | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | Tidak* | Tidak* | FbxFormat | Importer/exporter ada tetapi deteksi otomatis format tidak terhubung; tidak dapat digunakan melalui scene.open() |
| COLLADA | .dae | Ya | Ya | ColladaFormat | Membutuhkan 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:
| Opsi | Tipe | Bawaan | Efek |
|---|---|---|---|
enableMaterials | boolean | true | Mengurai .mtl berkas yang direferensikan oleh mtllib |
flipCoordinateSystem | boolean | false | Balik sumbu Y/Z untuk menyesuaikan sistem tangan kanan |
scale | number | 1.0 | Skala seragam diterapkan pada semua verteks saat dimuat |
normalizeNormal | boolean | true | Normalisasi 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
.mtlmaterial ditulis secara otomatis bersamaan dengan.objfile. - Gunakan GLB untuk pengiriman web: format biner yang berdiri sendiri menghindari masalah CORS dengan
.binsidecar 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. xmldomdiperlukan untuk COLLADA: itu dipasang secara otomatis. Jangan menambahkannya kepeerDependenciesatau coba menghapusnya; pembaca COLLADA memanggilnya secara langsung.
Masalah Umum
| Gejala | Penyebab Kemungkinan | Perbaiki |
|---|---|---|
| Material OBJ kosong setelah dimuat | enableMaterials tidak disetel | Lewati ObjLoadOptions dengan enableMaterials = true |
GLB menghasilkan sebuah .bin sidecar | binaryMode menggunakan default false | Atur opts.binaryMode = true di GltfSaveOptions |
scene.open() menghasilkan “unsupported format” | Ekstensi file tidak dikenali | Lewati yang cocok *LoadOptions kelas atau gunakan openFromBuffer() |
| Pemuatan COLLADA gagal dengan kesalahan XML | xmldom hilang atau tidak cocok | Jalankan npm install @aspose/3d lagi; xmldom adalah ketergantungan langsung |
| Normal STL hilang dalam ekspor ASCII | ASCII STL menghilangkan normal per-wajah | Gunakan binaryMode = true untuk output yang mempertahankan normal |
Lihat Juga
- Fitur dan Fungsionalitas: grafik adegan, mesh, material, animasi, dan API matematika.
- Grafik Adegan: membangun dan menelusuri pohon node.
- Cara Membuat Mesh 3D Secara Programatik