การสนับสนุนรูปแบบ 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ใช่ใช่GltfFormatBinary glTF; ตั้งค่า binaryMode = true
STL.stlใช่ใช่StlFormatโหมดไบนารีและ ASCII
3MF.3mfใช่ใช่ThreeMfFormat3D Manufacturing Format
FBX.fbxไม่*ไม่*FbxFormatมีตัวนำเข้า/ส่งออกอยู่ แต่การตรวจจับรูปแบบอัตโนมัติยังไม่ได้เชื่อมต่อ; ไม่สามารถใช้ได้ผ่าน scene.open()
COLLADA.daeใช่ใช่ColladaFormatต้องการ xmldom (ติดตั้งอัตโนมัติ)

OBJ (Wavefront)

OBJ รองรับการนำเข้าและส่งออกทั้งสองใน @aspose/3d. เมื่อบันทึกเป็น OBJ, ไลบรารีวัสดุ (.mtl) จะถูกเขียนโดยอัตโนมัติข้างเคียงกับ .obj ไฟล์ ใช้ ObjLoadOptions เพื่อควบคุมการโหลดวัสดุและพฤติกรรมของระบบพิกัด.

ตัวเลือกสำคัญสำหรับ ObjLoadOptions:

ตัวเลือกประเภทค่าเริ่มต้นผล
enableMaterialsbooleantrueแยกวิเคราะห์ .mtl ไฟล์ที่อ้างอิงโดย mtllib
flipCoordinateSystembooleanfalseพลิกแกน Y/Z เพื่อให้ตรงกับระบบขวา
scalenumber1.0สเกลสม่ำเสมอที่ใช้กับเวอร์เท็กซ์ทั้งหมดเมื่อโหลด
normalizeNormalbooleantrueทำให้เวกเตอร์ปกติของเวอร์เทกซ์เป็นความยาวหน่วย
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 กับ .bin sidecars และโหลดเร็วขึ้นในเรนเดอร์ WebGL.
  • ส่งตัวเลือกเฉพาะรูปแบบ: ทั่วไป scene.open(path) ทำงานกับรูปแบบส่วนใหญ่, แต่การส่งคลาสตัวเลือก loader จะเปิดใช้งานพฤติกรรมเฉพาะรูปแบบ เช่น การโหลดวัสดุ OBJ หรือการทำให้มาตรฐานพิกัด STL.
  • xmldom จำเป็นสำหรับ COLLADA: มันจะถูกติดตั้งโดยอัตโนมัติ ไม่ต้องเพิ่มมันเข้าไปใน peerDependencies หรือพยายามลบออก; ตัวอ่าน COLLADA เรียกใช้โดยตรง.

ปัญหาทั่วไป

อาการสาเหตุที่เป็นไปได้วิธีแก้
วัสดุ OBJ จะว่างเปล่าหลังจากโหลดenableMaterials ไม่ได้ตั้งค่าผ่าน ObjLoadOptions กับ enableMaterials = true
GLB สร้างขึ้นเป็น .bin sidecarbinaryMode ตั้งค่าเริ่มต้นเป็น falseตั้งค่า opts.binaryMode = true ใน GltfSaveOptions
scene.open() โยน “unsupported format”ไม่รู้จักส่วนขยายไฟล์ส่งค่าที่ตรงกัน *LoadOptions คลาสหรือใช้ openFromBuffer()
การโหลด COLLADA ล้มเหลวด้วยข้อผิดพลาด XMLxmldom หายไปหรือไม่ตรงกันรัน npm install @aspose/3d อีกครั้ง; xmldom เป็นการพึ่งพาโดยตรง
Normal ของ STL สูญหายในการส่งออกเป็น ASCIIASCII STL ไม่บันทึกเวกเตอร์ปกติต่อหน้าใช้ binaryMode = true เพื่อผลลัพธ์ที่คงรักษาเวกเตอร์ปกติ

ดูเพิ่มเติม

 ภาษาไทย