كيفية تحويل النماذج ثلاثية الأبعاد في 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()auto-detection. امتداد.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 موجودة في المكتبة لكنها تتطلب استدعاءً مباشراً بدلاً من واجهة برمجة التطبيقات عالية المستوى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 غير مدعوم عبر واجهة برمجة التطبيقات عالية المستوى open()/save() — التنسيق غير مدمج في الكشف التلقائي. جميع خلايا FBX أعلاه هي ✗.
المشكلات الشائعة والحلول
يتم فقدان المواد بعد التحويل
يتم تحميل مواد OBJ (usemtl، .mtl ملف) عندما 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 عبر واجهة برمجة التطبيقات عالية المستوى.
هل يتم حفظ بيانات القوام؟
الملمس المشار إليه بمواد OBJ أو المدمج في glTF يتم نقله إلى مخطط المشهد. عند الحفظ إلى GLB (binaryMode = true)، يتم تضمين المخزن الثنائي في ملف واحد. بالنسبة لإخراج OBJ، يتم حفظ الملمس كملفات منفصلة إلى جانب .obj.
هل يمكنني تحويل العديد من الملفات بالتوازي؟
scene.open() و scene.save() متزامنان. استخدم Node.js worker_threads للمعالجة المتوازية.