چگونه مدلهای سهبعدی را در TypeScript تبدیل کنیم
Aspose.3D FOSS for TypeScript بین فرمتهای 3D با بارگذاری به یک نمایش Scene خنثی و ذخیره به فرمت هدف تبدیل میکند. این راهنما رایجترین تبدیلها را نشان میدهد.
راهنمای گام به گام
مرحله 1: نصب @aspose/3d
npm install @aspose/3dمرحله ۲: بارگذاری فایل منبع
یک 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);مرحله ۳: ذخیره به قالب هدف
با مسیر خروجی، 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 استفاده کنید.
مرحله ۴: مثالهای رایج تبدیل
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 file) زمانی که ObjLoadOptions.enableMaterials = true بارگذاری میشوند. هنگام ذخیرهسازی به glTF، ویژگیهای مواد PBR بهصورت خودکار نگاشته میشوند. مواد پیچیده (پروسیجرال، چند لایه) ممکن است با دقت کمتر تبدیل شوند.
مش بهدرستی مقیاسبندی نشده است
فرمتهای مختلف از واحدهای پیشفرض متفاوتی استفاده میکنند (میلیمتر برای STL، متر برای glTF). برای نرمالسازی واحدها هنگام بارگذاری از ObjLoadOptions.scale یا هنگام ذخیرهسازی از StlSaveOptions.scaleFactor استفاده کنید.
ناسازگاری سیستم مختصات (مدل وارونه یا چرخیده)
برخی فرمتها از محور Y‑بالا به سمت راست استفاده میکنند، در حالی که دیگران Z‑بالا هستند. از 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() همزمان هستند. برای پردازش موازی از Node.js worker_threads استفاده کنید.