Sokongan Format 3D
Aspose.3D FOSS for TypeScript membaca dan menulis tujuh format fail 3D utama. Pengesanan format adalah automatik semasa memuat: perpustakaan memeriksa nombor magik binari supaya anda tidak perlu menentukan format sumber. Kelas pilihan khusus format diimport dari sub‑laluan dalam pakej @aspose/3d.
Format yang Disokong
| Format | Sambungan | Baca | Tulis | Kelas Format | Nota |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Yes | Yes | ObjFormat | Membaca bahan .mtl; menulis .mtl bersama .obj |
| glTF 2.0 | .gltf | Yes | Yes | GltfFormat | Teks JSON + fail sampingan .bin |
| GLB | .glb | Yes | Yes | GltfFormat | glTF binari; tetapkan binaryMode = true |
| STL | .stl | Yes | Yes | StlFormat | Mod binari dan ASCII |
| 3MF | .3mf | Yes | Yes | ThreeMfFormat | Format Pembuatan 3D |
| FBX | .fbx | No* | No* | FbxFormat | Pengimport/pengexport wujud tetapi pengesanan automatik format tidak disambungkan; tidak boleh digunakan melalui scene.open() |
| COLLADA | .dae | Yes | Yes | ColladaFormat | Memerlukan xmldom (dipasang secara automatik) |
OBJ (Wavefront)
OBJ menyokong import dan eksport dalam @aspose/3d. Apabila menyimpan sebagai OBJ, perpustakaan bahan (.mtl) ditulis secara automatik bersama fail .obj. Gunakan ObjLoadOptions untuk mengawal pemuatan bahan dan tingkah laku sistem koordinat.
Pilihan utama untuk ObjLoadOptions:
| Pilihan | Jenis | Lalai | Kesan |
|---|---|---|---|
enableMaterials | boolean | true | Huraikan fail .mtl yang dirujuk oleh mtllib |
flipCoordinateSystem | boolean | false | Balikkan paksi Y/Z untuk menyesuaikan sistem tangan kanan |
scale | number | 1.0 | Skala seragam yang diterapkan pada semua titik pada pemuatan |
normalizeNormal | boolean | true | Normalisasikan normal titik ke panjang unit |
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 menukar OBJ kepada mana-mana format yang boleh ditulis, muatkan ia dan panggil scene.save() dengan kelas format sasaran.
glTF dan GLB
glTF 2.0 adalah format pertukaran yang disyorkan untuk penggunaan web dan enjin permainan. Perpustakaan menggunakan kelas GltfFormat yang sama untuk kedua-dua .gltf (JSON + sidecar) dan .glb (binari, berdiri sendiri) output. Tukar 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
Eksport 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);Eksport sebagai GLB binari (.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 penghantaran aset produksi. Satu .glb tunggal memuat lebih cepat dalam pelayar dan enjin berbanding pasangan teks + binari yang berasingan.
STL
STL ialah format mesh bersegitiga yang digunakan dalam CAD dan pencetakan 3D. Kedua‑duanya STL binari dan ASCII disokong untuk input dan output. StlSaveOptions.binaryMode mengawal sama ada output adalah binari (padat) atau ASCII (boleh 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 bersegitiga dan normal vertex. Bahan dan data UV tidak dipelihara dalam STL.
3MF (Format Pembuatan 3D)
3MF ialah format berasaskan XML yang direka untuk pembuatan tambahan. Ia menyokong metadata warna dan bahan bersama geometri. Gunakan ia apabila menukar fail dengan pemotong cetakan 3D atau aliran kerja pembuatan.
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());Fail 3MF adalah arkib ZIP secara dalaman. Perpustakaan mengendalikan penciptaan dan pengekstrakan arkib secara automatik.
FBX
Amaran: kelas pengimport dan pengeksport FBX (
FbxImporter,FbxExporter) wujud dalam perpustakaan, tetapi pengesanan automatik format FBX tidak disambungkan kescene.open()atauscene.save(). Memanggilscene.open('file.fbx')tidak akan memanggil pengimport FBX — fail akan jatuh ke fallback STL. Memanggilscene.save('output.fbx', opts)tidak akan memanggil pengeksport FBX. Jadual sokongan format di atas menandakan FBX sebagaiNo*atas sebab ini. Gunakan GLB atau COLLADA untuk import dan eksport yang berfungsi sepenuhnya melaluiscene.open()/scene.save().
COLLADA (DAE)
COLLADA ialah format pertukaran berasaskan XML yang disokong oleh pelbagai alat DCC (Blender, Maya, Cinema 4D). Perpustakaan menggunakan kebergantungan xmldom untuk penguraian XML; ia dipasang secara automatik 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);Fail COLLADA mungkin mengandungi metadata skala unit (elemen <unit>). Perpustakaan melaksanakan penukaran unit secara automatik semasa memuatkan.
Pengesanan Automatik Format
Apabila memuatkan dari laluan fail, perpustakaan mencuba pengesanan format daripada nombor sihir binari sebelum kembali kepada sambungan fail. Ini bermakna anda boleh memuatkan fail GLB bernama .bin atau fail STL bernama .model tanpa menyatakan format secara eksplisit.
Apabila memuatkan dari Buffer dengan scene.openFromBuffer(), pengesanan nombor ajaib 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 nombor sihir yang boleh dipercayai: GLB (glTF), STL binari (pengepala 80‑byte + kiraan segitiga), 3MF (sihir ZIP PK). OBJ dan COLLADA berasaskan teks dan dikesan daripada sambungan fail atau melalui kelas pilihan yang anda berikan.
Petua
- OBJ menyokong import dan eksport: apabila menyimpan sebagai OBJ, fail bahan
.mtlditulis secara automatik bersama fail.obj. - Gunakan GLB untuk penghantaran web: format binari berdiri sendiri mengelakkan isu CORS dengan sidecar
.bindan memuat lebih cepat dalam perender WebGL. - Hantar pilihan khusus format:
scene.open(path)generik berfungsi untuk kebanyakan format, tetapi menghantar kelas pilihan pemuat membolehkan tingkah laku khusus format seperti pemuatan bahan OBJ atau normalisasi koordinat STL. xmldomdiperlukan untuk COLLADA: ia dipasang secara automatik. Jangan tambahkan kepeerDependenciesatau cuba membuangnya; pembaca COLLADA memanggilnya secara langsung.
Isu Umum
| Gejala | Punca Kemungkinan | Pembaikan |
|---|---|---|
| Bahan OBJ kosong selepas dimuatkan | enableMaterials tidak ditetapkan | Hantar ObjLoadOptions dengan enableMaterials = true |
GLB menghasilkan fail sisi .bin | binaryMode secara lalai kepada false | Tetapkan opts.binaryMode = true dalam GltfSaveOptions |
scene.open() memunculkan “format tidak disokong” | Sambungan fail tidak dikenali | Hantar kelas *LoadOptions yang sepadan atau gunakan openFromBuffer() |
| Muat turun COLLADA gagal dengan ralat XML | xmldom tiada atau tidak sepadan | Jalankan npm install @aspose/3d semula; xmldom ialah kebergantungan langsung |
| Normal STL hilang dalam eksport ASCII | ASCII STL mengabaikan normal per-muka | Gunakan binaryMode = true untuk output yang mengekalkan normal |
Lihat Juga
- Ciri-ciri dan Fungsi: scene graph, mesh, materials, animation, and math APIs.
- Scene Graph: membina dan menelusuri pokok nod.
- Cara Membina Mesh 3D Secara Programatik