วิธีแปลงโมเดล 3 มิติใน TypeScript
Aspose.3D FOSS for TypeScript แปลงระหว่างรูปแบบ 3D โดยการโหลดเข้าสู่การแสดงผลกลาง Scene แล้วบันทึกเป็นรูปแบบเป้าหมาย คู่มือนี้แสดงการแปลงที่พบบ่อยที่สุด.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้ง @aspose/3d
npm install @aspose/3dขั้นตอนที่ 2: โหลดไฟล์ต้นฉบับ
สร้าง Scene และเรียก scene.open(). ใช้คลาส *LoadOptions ที่เฉพาะรูปแบบเพื่อผลลัพธ์ที่ดีที่สุด.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
const opts = new ObjLoadOptions();
opts.enableMaterials = true;
scene.open('model.obj', opts);ขั้นตอนที่ 3: บันทึกเป็นรูปแบบเป้าหมาย
เรียก scene.save() พร้อมเส้นทางเอาต์พุต รูปแบบเอาต์พุตจะถูกตรวจจับจากส่วนขยายไฟล์.
// OBJ → glTF binary (GLB)
scene.save('output.glb');
// OBJ → STL
scene.save('output.stl');
// OBJ → COLLADA
scene.save('output.dae');หมายเหตุ: FBX ไม่รองรับ โดยการตรวจจับอัตโนมัติของ
scene.save(). ส่วนขยาย.fbxไม่ได้เชื่อมต่อกับผู้ส่งออกใด ๆ — การบันทึกเป็น.fbxจะเขียนเนื้อหาในรูปแบบ OBJ อย่างเงียบโดยอัตโนมัติ. ใช้ OBJ, glTF, STL, 3MF หรือ COLLADA เพื่อให้ได้ผลลัพธ์ที่เชื่อถือได้.
ขั้นตอนที่ 4: ตัวอย่างการแปลงทั่วไป
OBJ เป็น glTF / GLB
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
scene.save('model.glb');
console.log('Converted OBJ → GLB');FBX — ไม่รองรับ
การตรวจจับอัตโนมัติของ FBX ไม่ได้เชื่อมต่อใน
scene.open(). ไฟล์.fbxที่ส่งไปยังscene.open()ไม่ได้รับการจดจำโดยตัวตรวจจับรูปแบบใด ๆ และจะถูกส่งต่อไปยังตัวแยกวิเคราะห์ STL ซึ่งจะล้มเหลวหรือสร้างข้อมูลขยะ. คลาสผู้นำเข้า/ส่งออก FBX มีอยู่ในไลบรารีแต่ต้องเรียกใช้โดยตรงแทนการใช้ API ระดับสูงopen()/save(). ใช้ COLLADA, OBJ หรือ glTF เป็นทางเลือกแทน FBX.
glTF เป็น STL
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.glb');
scene.save('model.stl');
console.log('Converted GLB → STL');COLLADA เป็น 3MF
import { Scene } from '@aspose/3d';
const scene = new Scene();
scene.open('model.dae');
scene.save('model.3mf');
console.log('Converted COLLADA → 3MF');ขั้นตอนที่ 5: แปลงหลายไฟล์เป็นชุด
import * as fs from 'fs';
import * as path from 'path';
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const inputDir = './input';
const outputDir = './output';
fs.mkdirSync(outputDir, { recursive: true });
const objFiles = fs.readdirSync(inputDir).filter(f => f.endsWith('.obj'));
for (const file of objFiles) {
const inputPath = path.join(inputDir, file);
const outputFile = file.replace('.obj', '.glb');
const outputPath = path.join(outputDir, outputFile);
const scene = new Scene();
scene.open(inputPath, new ObjLoadOptions());
scene.save(outputPath);
console.log(`Converted ${file} → ${outputFile}`);
}เมทริกซ์การแปลงที่รองรับ
| จาก \ ถึง | glTF/GLB | OBJ | STL | FBX | 3MF | COLLADA |
|---|---|---|---|---|---|---|
| OBJ | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| glTF/GLB | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| FBX | ✗ | ✗ | ✗ | ✗ | ✗ | ✗ |
| STL | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| 3MF | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
| COLLADA | ✓ | ✓ | ✓ | ✗ | ✓ | ✓ |
FBX ไม่ได้รับการสนับสนุนผ่าน API ระดับสูง open()/save() — รูปแบบนี้ไม่ได้เชื่อมต่อกับการตรวจจับอัตโนมัติ. เซลล์ FBX ทั้งหมดด้านบนเป็น ✗.
ปัญหาทั่วไปและการแก้ไข
วัสดุหายไปหลังจากการแปลง
วัสดุ OBJ (usemtl, .mtl ไฟล์) จะถูกโหลดเมื่อ ObjLoadOptions.enableMaterials = true. เมื่อบันทึกเป็น glTF, คุณสมบัติวัสดุ PBR จะถูกแมปโดยอัตโนมัติ. วัสดุที่ซับซ้อน (เชิงกระบวนการ, หลายชั้น) อาจแปลงด้วยความแม่นยำที่ลดลง.
เมชแสดงขนาดไม่ถูกต้อง
รูปแบบต่าง ๆ ใช้หน่วยเริ่มต้นที่แตกต่างกัน (มิลลิเมตรสำหรับ STL, เมตรสำหรับ glTF) ใช้ ObjLoadOptions.scale เมื่อโหลดหรือ StlSaveOptions.scaleFactor เมื่อบันทึกเพื่อทำให้หน่วยเป็นมาตรฐาน
ความไม่ตรงกันของระบบพิกัด (โมเดลถูกพลิกหรือหมุน)
บางรูปแบบใช้ Y‑up ด้านขวา, ส่วนอื่นใช้ Z‑up. ใช้ ObjLoadOptions.flipCoordinateSystem = true หรือทำการหมุนโหนดรากหลังจากโหลด.
คำถามที่พบบ่อย
การแปลงจะคงแอนิเมชันไว้หรือไม่?
ข้อมูลการเคลื่อนไหวจะถูกเก็บรักษาไว้เมื่อแปลงระหว่างรูปแบบที่รองรับ (เช่น COLLADA → glTF). STL และ OBJ ไม่ได้บรรจุข้อมูลการเคลื่อนไหว. FBX ไม่ได้รับการสนับสนุนผ่าน scene.open()/scene.save(), ดังนั้นการทำรอบการเคลื่อนไหวของ FBX จึงไม่สามารถทำได้ผ่าน API ระดับสูง.
ข้อมูลพื้นผิวถูกเก็บรักษาไว้หรือไม่?
พื้นผิวที่อ้างอิงโดยวัสดุ OBJ หรือฝังใน glTF จะถูกส่งต่อไปยังกราฟฉาก เมื่อบันทึกเป็น GLB (binaryMode = true) บัฟเฟอร์ไบนารีจะถูกฝังไว้ในไฟล์เดียว สำหรับการส่งออก OBJ พื้นผิวจะถูกบันทึกเป็นไฟล์แยกพร้อมกับ .obj.
ฉันสามารถแปลงไฟล์หลายไฟล์พร้อมกันได้หรือไม่?
scene.open() และ scene.save() เป็น synchronous. ใช้ Node.js worker_threads สำหรับการประมวลผลแบบขนาน.