วิธีบันทึกโมเดล 3D ใน TypeScript
Aspose.3D FOSS สำหรับ TypeScript บันทึกฉากไปยังรูปแบบที่รองรับทั้งหมดด้วยคำสั่งเดียว scene.save() การเรียกใช้ รูปแบบผลลัพธ์จะถูกตรวจจับโดยอัตโนมัติจากส่วนขยายของไฟล์ คู่มือฉบับนี้ครอบคลุมการบันทึกไปยังแต่ละรูปแบบและการใช้ตัวเลือกเฉพาะรูปแบบ.
คู่มือแบบขั้นตอนต่อขั้นตอน
ขั้นตอนที่ 1: ติดตั้ง @aspose/3d
npm install @aspose/3dขั้นตอนที่ 2: โหลดหรือสร้างฉาก
โหลดไฟล์ที่มีอยู่แล้วหรือสร้างฉากโดยโปรแกรมก่อนทำการบันทึก.
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
// Load from file
const scene = new Scene();
scene.open('source.obj', new ObjLoadOptions());
// Or create a new empty scene
const emptyScene = new Scene();ขั้นตอนที่ 3: บันทึกด้วยรูปแบบที่ตรวจจับอัตโนมัติ
scene.save(path) ตรวจจับรูปแบบผลลัพธ์จากส่วนขยายของไฟล์:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('input.obj', new ObjLoadOptions());
// Save as binary glTF
scene.save('output.glb');
// Save as JSON glTF
scene.save('output.gltf');
// Save as STL
scene.save('output.stl');
// Save as OBJ
scene.save('output.obj');
// Save as FBX
scene.save('output.fbx');
// Save as 3MF
scene.save('output.3mf');
// Save as COLLADA
scene.save('output.dae');ขั้นตอนที่ 4: ใช้ SaveOptions เฉพาะรูปแบบ
หากต้องการการควบคุมที่ละเอียด ให้ส่งอ็อบเจกต์ตัวเลือกเฉพาะรูปแบบ:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
import { GltfSaveOptions } from '@aspose/3d/formats/gltf';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
// Export to GLB with specific options
const saveOptions = new GltfSaveOptions();
saveOptions.binaryMode = true; // produce GLB (binary glTF)
scene.save('output.glb', saveOptions);ขั้นตอนที่ 5: บันทึกลง Buffer (ในหน่วยความจำ)
ใช้ scene.saveToBuffer() เพื่อรับผลลัพธ์เป็น Buffer โดยไม่ต้องเขียนลงดิสก์:
import { Scene } from '@aspose/3d';
import { ObjLoadOptions } from '@aspose/3d/formats/obj';
const scene = new Scene();
scene.open('model.obj', new ObjLoadOptions());
const buffer = scene.saveToBuffer('output.glb');
console.log(`Buffer size: ${buffer.length} bytes`);
// Send via HTTP, upload to S3, etc.
ขั้นตอนที่ 6: ตรวจสอบผลลัพธ์
หลังจากบันทึกแล้ว ให้ตรวจสอบว่าไฟล์มีอยู่และมีขนาดไม่เป็นศูนย์:
import * as fs from 'fs';
const stats = fs.statSync('output.glb');
console.log(`Saved output.glb: ${stats.size} bytes`);เมทริกซ์การสนับสนุนรูปแบบ
| นามสกุล | รูปแบบ | หมายเหตุ |
|---|---|---|
.glb | glTF 2.0 Binary | แนะนำสำหรับ glTF; สินทรัพย์ทั้งหมดฝังอยู่ในไฟล์เดียว |
.gltf | glTF 2.0 JSON | แยก .bin และไฟล์เทกเจอร์อยู่เคียงข้าง JSON |
.obj | Wavefront OBJ | เขียน .mtl ไฟล์วัสดุเคียงข้าง .obj เมื่อมีวัสดุ |
.stl | STL | ค่าเริ่มต้น: binary STL; ใช้ StlSaveOptions.ascii = true สำหรับข้อความ |
.fbx | Autodesk FBX | รูปแบบ FBX แบบไบนารี |
.3mf | 3D Manufacturing | เหมาะสำหรับเวิร์กโฟลว์การพิมพ์ 3 มิติ |
.dae | COLLADA | รูปแบบการแลกเปลี่ยนแบบ XML |
ปัญหาทั่วไปและวิธีแก้
Error: Unsupported format เมื่อบันทึก
ตรวจสอบให้แน่ใจว่านามสกุลไฟล์ตรงกับรูปแบบที่รองรับ ไลบรารีใช้ส่วนขยายเพื่อระบุรูปแบบ; ไฟล์ที่ชื่อ output.xyz จะล้มเหลว.
.obj ไฟล์บันทึกแล้วแต่วัสดุหายไป
เมื่อบันทึก OBJ, ไลบรารีวัสดุ (.mtl) จะถูกเขียนโดยอัตโนมัติพร้อมกับ .obj. ไฟล์ทั้งสองต้องอยู่ในไดเรกทอรีเดียวกันเมื่อเปิดใหม่ หากคุณต้องการเพียงเรขาคณิตเท่านั้น ให้ตั้งค่า ObjSaveOptions.enableMaterials = false.
ใหญ่ .gltf พร้อมเทกเจอร์แยก
ใช้ .glb แทน .gltf; มันรวมข้อมูลไบนารีไว้ในไฟล์เดียวที่เป็นอิสระ ตั้งค่า GltfSaveOptions.binaryMode = true เมื่อส่งผ่าน GltfSaveOptions อินสแตนซ์.
คำถามที่พบบ่อย
ฉันสามารถบันทึกเป็นหลายรูปแบบในหนึ่งรอบได้หรือไม่?
ใช่; เรียก scene.save() หลายครั้งด้วยเส้นทางที่แตกต่างกัน:
scene.save('output.glb');
scene.save('output.stl');
scene.save('output.obj');การบันทึกทำให้ฉากเปลี่ยนแปลงหรือไม่?
ไม่. scene.save() เป็นการดำเนินการแบบอ่านอย่างเดียวบนกราฟฉาก. คุณสามารถบันทึกฉากเดียวกันเป็นหลายรูปแบบได้โดยไม่มีผลข้างเคียงใดๆ.
ฉันสามารถเขียนทับไฟล์ต้นฉบับได้หรือไม่?
ใช่. ส่งพาธเดียวกันไปยัง scene.save() ที่คุณใช้ใน scene.open(). ไลบรารีเขียนลงบัฟเฟอร์แล้วจึงเขียนลงดิสก์.