วิธีบันทึกโมเดล 3D ใน TypeScript

วิธีบันทึกโมเดล 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`);

เมทริกซ์การสนับสนุนรูปแบบ

นามสกุลรูปแบบหมายเหตุ
.glbglTF 2.0 Binaryแนะนำสำหรับ glTF; สินทรัพย์ทั้งหมดฝังอยู่ในไฟล์เดียว
.gltfglTF 2.0 JSONแยก .bin และไฟล์เทกเจอร์อยู่เคียงข้าง JSON
.objWavefront OBJเขียน .mtl ไฟล์วัสดุเคียงข้าง .obj เมื่อมีวัสดุ
.stlSTLค่าเริ่มต้น: binary STL; ใช้ StlSaveOptions.ascii = true สำหรับข้อความ
.fbxAutodesk FBXรูปแบบ FBX แบบไบนารี
.3mf3D Manufacturingเหมาะสำหรับเวิร์กโฟลว์การพิมพ์ 3 มิติ
.daeCOLLADAรูปแบบการแลกเปลี่ยนแบบ 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(). ไลบรารีเขียนลงบัฟเฟอร์แล้วจึงเขียนลงดิสก์.


ดูเพิ่มเติม

 ภาษาไทย