การสนับสนุนรูปแบบ 3D
Aspose.3D FOSS สำหรับ TypeScript สามารถอ่านและเขียนไฟล์ 3D ที่สำคัญเจ็ดรูปแบบ การตรวจจับรูปแบบทำโดยอัตโนมัติเมื่อโหลด: ไลบรารีตรวจสอบเลขมาจิกไบนารีเพื่อไม่ต้องระบุรูปแบบแหล่งที่มา คลาสตัวเลือกเฉพาะรูปแบบจะถูกนำเข้าจาก sub-paths ของ @aspose/3d แพคเกจ.
รูปแบบที่รองรับ
| รูปแบบ | ส่วนขยาย | อ่าน | เขียน | คลาสรูปแบบ | หมายเหตุ |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | ใช่ | ใช่ | ObjFormat | อ่าน .mtl วัสดุ; เขียน .mtl เคียงข้าง .obj |
| glTF 2.0 | .gltf | ใช่ | ใช่ | GltfFormat | ข้อความ JSON + .bin sidecar |
| GLB | .glb | ใช่ | ใช่ | GltfFormat | Binary glTF; ตั้งค่า binaryMode = true |
| STL | .stl | ใช่ | ใช่ | StlFormat | โหมดไบนารีและ ASCII |
| 3MF | .3mf | ใช่ | ใช่ | ThreeMfFormat | 3D Manufacturing Format |
| FBX | .fbx | ไม่* | ไม่* | FbxFormat | มีตัวนำเข้า/ส่งออกอยู่ แต่การตรวจจับรูปแบบอัตโนมัติยังไม่ได้เชื่อมต่อ; ไม่สามารถใช้ได้ผ่าน scene.open() |
| COLLADA | .dae | ใช่ | ใช่ | ColladaFormat | ต้องการ xmldom (ติดตั้งอัตโนมัติ) |
OBJ (Wavefront)
OBJ รองรับการนำเข้าและส่งออกทั้งสองใน @aspose/3d. เมื่อบันทึกเป็น OBJ, ไลบรารีวัสดุ (.mtl) จะถูกเขียนโดยอัตโนมัติข้างเคียงกับ .obj ไฟล์ ใช้ ObjLoadOptions เพื่อควบคุมการโหลดวัสดุและพฤติกรรมของระบบพิกัด.
ตัวเลือกสำคัญสำหรับ ObjLoadOptions:
| ตัวเลือก | ประเภท | ค่าเริ่มต้น | ผล |
|---|---|---|---|
enableMaterials | boolean | true | แยกวิเคราะห์ .mtl ไฟล์ที่อ้างอิงโดย mtllib |
flipCoordinateSystem | boolean | false | พลิกแกน Y/Z เพื่อให้ตรงกับระบบขวา |
scale | number | 1.0 | สเกลสม่ำเสมอที่ใช้กับเวอร์เท็กซ์ทั้งหมดเมื่อโหลด |
normalizeNormal | boolean | true | ทำให้เวกเตอร์ปกติของเวอร์เทกซ์เป็นความยาวหน่วย |
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)`);เพื่อแปลงไฟล์ OBJ ไปเป็นรูปแบบใดก็ได้ที่สามารถเขียนได้ ให้โหลดไฟล์นั้นแล้วเรียก scene.save() ด้วยคลาสรูปแบบเป้าหมาย.
glTF and GLB
glTF 2.0 เป็นรูปแบบการแลกเปลี่ยนที่แนะนำสำหรับการใช้งานบนเว็บและเอนจินเกม ไลบรารีใช้แบบเดียวกัน GltfFormat คลาสสำหรับทั้งสองแบบ .gltf (JSON + sidecar) และ .glb (binary, self-contained) เป็นผลลัพธ์ สลับระหว่างสองแบบด้วย GltfSaveOptions.binaryMode.
โหลด glTF หรือ 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
ส่งออกเป็น 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);ส่งออกเป็น binary GLB (.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);ใช้ binaryMode = true สำหรับการส่งมอบสินทรัพย์ในสภาพการผลิต ไฟล์เดียว .glb โหลดได้เร็วกว่าในเบราว์เซอร์และเอนจินเมื่อเทียบกับการแยกเป็นคู่ข้อความ + binary.
STL
STL เป็นรูปแบบเมชแบบสามเหลี่ยมที่ใช้ใน CAD และการพิมพ์ 3 มิติ ทั้ง STL แบบไบนารีและ ASCII รองรับสำหรับการนำเข้าและส่งออก. StlSaveOptions.binaryMode ควบคุมว่าผลลัพธ์เป็นแบบไบนารี (กระชับ) หรือ ASCII (อ่านได้โดยมนุษย์).
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 เก็บเฉพาะเรขาคณิตแบบสามเหลี่ยมและเวกเตอร์ปกติของเวอร์เท็กซ์เท่านั้น ข้อมูลวัสดุและ UV จะไม่ถูกรักษาไว้ใน 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
คำเตือน: คลาสนำเข้าและส่งออก FBX (FbxImporter, FbxExporter) มีอยู่ในไลบรารี แต่การตรวจจับรูปแบบ FBX อัตโนมัติ ไม่ได้เชื่อมต่อ เข้าไปใน scene.open() หรือ scene.save(). การเรียก scene.open('file.fbx') จะไม่เรียกใช้ตัวนำเข้า FBX — ไฟล์จะถูกส่งต่อไปยังการสำรอง STL. การเรียก scene.save('output.fbx', opts) จะไม่เรียกใช้ตัวส่งออก FBX. ตารางสนับสนุนรูปแบบด้านบนระบุ FBX เป็น No* ด้วยเหตุผลนี้. ใช้ GLB หรือ COLLADA เพื่อการนำเข้าและส่งออกที่ทำงานเต็มรูปแบบผ่าน scene.open() / scene.save().
COLLADA (DAE)
COLLADA เป็นรูปแบบการแลกเปลี่ยนที่ใช้ XML เป็นฐานและได้รับการสนับสนุนจากเครื่องมือ DCC หลากหลาย (Blender, Maya, Cinema 4D). ไลบรารีใช้ the xmldom dependency สำหรับการแยกวิเคราะห์ XML; จะถูกติดตั้งโดยอัตโนมัติพร้อมกับ 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);ไฟล์ COLLADA อาจมีเมตาดาต้าการปรับสเกลหน่วย (<unit> element) ไลบรารีจะทำการแปลงหน่วยโดยอัตโนมัติเมื่อโหลด.
การตรวจจับรูปแบบอัตโนมัติ
เมื่อโหลดจากเส้นทางไฟล์ ไลบรารีจะพยายามตรวจจับรูปแบบจากหมายเลขมาจิกไบนารีก่อนที่จะย้อนกลับไปใช้ส่วนขยายไฟล์ ซึ่งหมายความว่าคุณสามารถโหลดไฟล์ GLB ที่ชื่อ .bin หรือไฟล์ STL ที่ชื่อ .model โดยไม่ระบุรูปแบบอย่างชัดเจน.
เมื่อโหลดจาก Buffer ด้วย scene.openFromBuffer(), การตรวจจับ magic-number เป็นกลไกหลัก:
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)`);รูปแบบที่มี magic numbers เชื่อถือได้: GLB (glTF), STL binary (หัว 80‑byte + จำนวนสามเหลี่ยม), 3MF (ZIP magic PK). OBJ และ COLLADA เป็นแบบข้อความและจะถูกตรวจจับจากส่วนขยายไฟล์หรือโดยคลาสตัวเลือกที่คุณส่ง.
เคล็ดลับ
- OBJ รองรับการนำเข้าและการส่งออกทั้งสองอย่าง: เมื่อบันทึกเป็น OBJ,
.mtlไฟล์วัสดุจะถูกเขียนโดยอัตโนมัติข้างเคียงกับ.objไฟล์. - ใช้ GLB สำหรับการส่งเว็บ: รูปแบบไบนารีที่เป็นอิสระช่วยหลีกเลี่ยงปัญหา CORS กับ
.binsidecars และโหลดเร็วขึ้นในเรนเดอร์ WebGL. - ส่งตัวเลือกเฉพาะรูปแบบ: ทั่วไป
scene.open(path)ทำงานกับรูปแบบส่วนใหญ่, แต่การส่งคลาสตัวเลือก loader จะเปิดใช้งานพฤติกรรมเฉพาะรูปแบบ เช่น การโหลดวัสดุ OBJ หรือการทำให้มาตรฐานพิกัด STL. xmldomจำเป็นสำหรับ COLLADA: มันจะถูกติดตั้งโดยอัตโนมัติ ไม่ต้องเพิ่มมันเข้าไปในpeerDependenciesหรือพยายามลบออก; ตัวอ่าน COLLADA เรียกใช้โดยตรง.
ปัญหาทั่วไป
| อาการ | สาเหตุที่เป็นไปได้ | วิธีแก้ |
|---|---|---|
| วัสดุ OBJ จะว่างเปล่าหลังจากโหลด | enableMaterials ไม่ได้ตั้งค่า | ผ่าน ObjLoadOptions กับ enableMaterials = true |
GLB สร้างขึ้นเป็น .bin sidecar | binaryMode ตั้งค่าเริ่มต้นเป็น false | ตั้งค่า opts.binaryMode = true ใน GltfSaveOptions |
scene.open() โยน “unsupported format” | ไม่รู้จักส่วนขยายไฟล์ | ส่งค่าที่ตรงกัน *LoadOptions คลาสหรือใช้ openFromBuffer() |
| การโหลด COLLADA ล้มเหลวด้วยข้อผิดพลาด XML | xmldom หายไปหรือไม่ตรงกัน | รัน npm install @aspose/3d อีกครั้ง; xmldom เป็นการพึ่งพาโดยตรง |
| Normal ของ STL สูญหายในการส่งออกเป็น ASCII | ASCII STL ไม่บันทึกเวกเตอร์ปกติต่อหน้า | ใช้ binaryMode = true เพื่อผลลัพธ์ที่คงรักษาเวกเตอร์ปกติ |
ดูเพิ่มเติม
- คุณลักษณะและฟังก์ชันการทำงาน: กราฟฉาก, mesh, materials, animation, และ math APIs.
- กราฟฉาก: การสร้างและการท่องโหนดต้นไม้.
- วิธีสร้าง 3D Mesh อย่างเป็นโปรแกรม.