כיצד להמיר מודלים תלת‑ממדיים ב‑TypeScript
Aspose.3D FOSS for TypeScript ממיר בין פורמטים תלת‑ממדיים על‑ידי טעינה לייצוג נייטרלי 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 קיימות בספרייה אך דורשות קריאה ישירה במקום ה‑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 ממופות אוטומטית. חומרים מורכבים (פרוצדורליים, מרובי‑שכבות) עשויים להיות מומרצים עם נאמנות מצומצמת.
Mesh מופיע בקנה מידה שגוי
פורמטים שונים משתמשים ביחידות ברירת מחדל שונות (מילימטרים עבור 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() הם סינכרוניים. השתמשו ב‑Node.js worker_threads לעיבוד מקבילי.