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

FormatSambunganBacaTulisKelas FormatNota
Wavefront OBJ.objYesYesObjFormatMembaca bahan .mtl; menulis .mtl bersama .obj
glTF 2.0.gltfYesYesGltfFormatTeks JSON + fail sampingan .bin
GLB.glbYesYesGltfFormatglTF binari; tetapkan binaryMode = true
STL.stlYesYesStlFormatMod binari dan ASCII
3MF.3mfYesYesThreeMfFormatFormat Pembuatan 3D
FBX.fbxNo*No*FbxFormatPengimport/pengexport wujud tetapi pengesanan automatik format tidak disambungkan; tidak boleh digunakan melalui scene.open()
COLLADA.daeYesYesColladaFormatMemerlukan 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:

PilihanJenisLalaiKesan
enableMaterialsbooleantrueHuraikan fail .mtl yang dirujuk oleh mtllib
flipCoordinateSystembooleanfalseBalikkan paksi Y/Z untuk menyesuaikan sistem tangan kanan
scalenumber1.0Skala seragam yang diterapkan pada semua titik pada pemuatan
normalizeNormalbooleantrueNormalisasikan 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 ke scene.open() atau scene.save(). Memanggil scene.open('file.fbx') tidak akan memanggil pengimport FBX — fail akan jatuh ke fallback STL. Memanggil scene.save('output.fbx', opts) tidak akan memanggil pengeksport FBX. Jadual sokongan format di atas menandakan FBX sebagai No* atas sebab ini. Gunakan GLB atau COLLADA untuk import dan eksport yang berfungsi sepenuhnya melalui scene.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 .mtl ditulis secara automatik bersama fail .obj.
  • Gunakan GLB untuk penghantaran web: format binari berdiri sendiri mengelakkan isu CORS dengan sidecar .bin dan 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.
  • xmldom diperlukan untuk COLLADA: ia dipasang secara automatik. Jangan tambahkan ke peerDependencies atau cuba membuangnya; pembaca COLLADA memanggilnya secara langsung.

Isu Umum

GejalaPunca KemungkinanPembaikan
Bahan OBJ kosong selepas dimuatkanenableMaterials tidak ditetapkanHantar ObjLoadOptions dengan enableMaterials = true
GLB menghasilkan fail sisi .binbinaryMode secara lalai kepada falseTetapkan opts.binaryMode = true dalam GltfSaveOptions
scene.open() memunculkan “format tidak disokong”Sambungan fail tidak dikenaliHantar kelas *LoadOptions yang sepadan atau gunakan openFromBuffer()
Muat turun COLLADA gagal dengan ralat XMLxmldom tiada atau tidak sepadanJalankan npm install @aspose/3d semula; xmldom ialah kebergantungan langsung
Normal STL hilang dalam eksport ASCIIASCII STL mengabaikan normal per-mukaGunakan binaryMode = true untuk output yang mengekalkan normal

Lihat Juga

 Bahasa Melayu