Aspose.3D FOSS עבור Java תומך בחמישה פורמטים של קבצים תלת‑ממדיים: OBJ, STL, glTF, GLB, ו FBX (ייבוא בלבד).
כל הדוגמאות משתמשות ב- com.aspose.threed.* חבילה:
import com.aspose.threed.*;
תלות Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
תצורת פורמטים
לפני שנצלול פנימה, הנה סקירה מהירה של ארבעת הפורמטים הנתמכים ושימושיהם השכיחים.
| פורמט | הרחבה | ייבוא | ייצוא | תמיכה בחומר | היררכיית סצנה |
|---|---|---|---|---|---|
| OBJ | .obj | כן | כן | בסיסי (קבצי MTL) | שטוח |
| STL | .stl | כן | כן | אין | דירה |
| glTF 2.0 | .gltf | כן | כן | PBR | מלא |
| GLB | .glb | כן | כן | PBR | מלא |
| FBX | .fbx | כן | לא | עשיר | מלא |
OBJ, STL, glTF, ו-GLB תומכים גם בייבוא וגם ביצוא. FBX נתמך עבור ייבוא בלבד. GLB (binary glTF) נוצר באמצעות GltfSaveOptions עם setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ הוא אחד ממבני הרשת התלת‑ממדיים הנתמכים ביותר. הוא מאחסן גאומטריה כטקסט פשוט, עם אפשרות .mtl קובץ נלווה לחומרים.
טעינת קבצי OBJ
הגישה הפשוטה ביותר היא להעביר את נתיב הקובץ ישירות:
Scene scene = Scene.fromFile("model.obj");
לשליטה רבה יותר, השתמש ב ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
כאשר קובץ ה-OBJ מתייחס לקובץ MTL (באמצעות mtllib ההוראה), הספרייה תנסה לטעון את הגדרות החומר ממנו באופן אוטומטי. קובץ ה-MTL צריך להיות באותה תיקייה כמו קובץ ה-OBJ או בנתיב שצוין בהוראה.
שמירה כ‑OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
מקרי שימוש ב‑OBJ
- החלפת נתוני מרשתות בין כלי תלת‑ממד שונים.
- ייבוא מודלים מספריות נכסים שמפיצות בפורמט OBJ.
- בדיקה מהירה של הגאומטריה ללא היררכיות סצנה מורכבות.
STL: סטריליתוגרפיה
STL הוא פורמט הסטנדרטי להדפסת תלת‑ממד. הוא מייצג גאומטריה משולשת גולמית ללא חומרים, צבעים או היררכיית סצנה. קבצי STL מגיעים בשתי גרסאות: ASCII (קריא לבן אדם) ו‑binary (דחוס).
טעינת קבצי STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
שמירה כ‑STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
כדי לשלוט בפלט, השתמש StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
שיקולי STL
- STL שומר רק גאומטריית משולשים. חומרים, מרקמים והיררכיית סצנה אינם נתמכים ומוסרים בעת הייצוא.
- ייצוא STL מבצע לא משולש אוטומטית. Binary STL כותב רק את שלושת הקודקודים הראשונים של כל משטח פוליגון; משטחים מרובעים ו‑n‑גוניים נחתכים בשקט. ASCII STL כותב את כל אינדקסי הקודקודים לכל משטח, ויוצר פלט פגום עבור משטחים שאינם משולשים. תמיד השתמש ברשתות קודמות משולשות (כל המשטחים משולשים) בעת הייצוא ל‑STL.
- STL בינארי קטן משמעותית מ‑STL ASCII עבור מודלים גדולים.
- STL הוא הפורמט המועדף כאשר היעד הוא מדפסת תלת‑ממד או תוכנת חיתוך.
glTF: פורמט העברת GL
glTF הוא פורמט מודרני שנועד להעברה וטעינה יעילה של תוכן תלת‑ממדי, במיוחד ברשת וביישומים בזמן אמת. הוא תומך בחומרי PBR, היררכיות סצנה, ובאנימציות.
טעינת קבצי glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
שמירה כ‑glTF
השמירה הבסיסית משתמשת בסיומת הקובץ כדי לקבוע את הפורמט:
scene.save("output.gltf");
לשליטה מפורטת, השתמש GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
פרטי GltfSaveOptions
| שיטה | מטרה |
|---|---|
setFlipCoordinateSystem(boolean) | הפוך את ציר מערכת הקואורדינטות במהלך הייצוא. שימושי בעת המרה מ‑Y‑up ל‑Z‑up או להפך. |
setPrettyPrint(boolean) | עצב את קובץ ה‑JSON הפלט עם הזחה לקריאות טובה יותר. הגדר ל false לגודל קובץ קטן יותר בייצור. |
מקרי שימוש ב‑glTF
- צופים תלת‑ממדיים מבוססי אינטרנט (three.js, Babylon.js).
- יישומים בזמן אמת ומנועי משחק.
- שמירת הגדרות חומרים PBR בין כלים.
FBX: Filmbox (יבוא בלבד)
FBX הוא פורמט קנייני של Autodesk המשמש נרחבות בפיתוח משחקים ויצירת תוכן דיגיטלי. Aspose.3D FOSS עבור Java תומך ב‑FBX עבור יבוא בלבד — ייצוא ל‑FBX אינו זמין.
רק FBX בינארי. מייבא ה‑FBX קורא רק קבצי FBX בינאריים. העברת קובץ FBX בטקסט ASCII גורמת ל‑ ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). היררכיית הצמתים והוצאת החומרים מ‑FBX אינן מאומתות במלואן; סצנות FBX מורכבות עשויות שלא להיטען במלואן. אנימציות והקצאת שלדים אינם מיושמים.
טעינת קבצי FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
המרת FBX לפורמטים אחרים
מאחר שייצוא FBX אינו נתמך, המר סצנות FBX מיובאות ל‑glTF, GLB, OBJ, או STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
מקרי שימוש ב‑FBX
- ייבוא נכסי רשת סטטיים מכלי Autodesk (Maya, 3ds Max) והמרתם לפורמטים אחרים.
- טעינת גאומטריית FBX בינארית וייצוא מחדש ל‑glTF/GLB, OBJ, או STL.
המרה קבוצתית
תהליך עבודה נפוץ הוא המרת כל הספרייה של קבצים מפורמט אחד לאחר. הנה תבנית להמרה קבוצתית:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
זה טוען את כל .obj קובץ בתיקייה, ממיר כל אחד ל‑glTF עם פלט מודפס בצורה יפה, ושומר את התוצאות. אתה יכול להתאים תבנית זו לכל שילוב של פורמט מקור ופורמט יעד.
הפניה להמרת פורמטים חוצי
הטבלה שלהלן מציגה מה לצפות בעת המרה בין פורמטים.
| מ- | אל | גאומטריה | חומרים | היררכיה | הערות |
|---|---|---|---|---|---|
| OBJ | STL | שמור | אבוד | N/A | ל‑STL אין תמיכת חומרים |
| OBJ | glTF/GLB | שמור | הומר ל‑PBR | שטוח | חומרי MTL ממופים כאשר אפשר |
| STL | OBJ | שמור | אין | N/A | אין חומרים במקור |
| STL | glTF/GLB | שמור | ברירת מחדל | שטוח | חומר ברירת מחדל הוחל |
| glTF | OBJ | שמור | מפושט | שטוח | PBR לחומר בסיסי |
| glTF | STL | שמור | אבוד | שטוח | גאומטריה בלבד |
| FBX | OBJ | שמור | מפושט | שטוח | פישוט חומר |
| FBX | STL | שמור | אבוד | שטוח | רק גאומטריה |
| FBX | glTF/GLB | שמור | הומר ל‑PBR | נשמר | איכות טובה |
הנחיות כלליות להמרה
- גאומטריה בדרך כלל נשמר בין זוגות הפורמטים, עם יוצא דופן חשוב אחד: בעת יצוא ל‑STL, הרשתות חייבות להיות מורכבות לחלוטין מפאות משולשיות. STL בינארי חותך בשקט פאות מרובעות ו‑n‑גוניות ל‑3 הקודקודים הראשונים שלהן; STL בטקסט (ASCII) מייצר פלט פגום עבור פאות שאינן משולשיות.
- חומרים מתקיימים בצורה הטובה ביותר בין סצנות מיובאות מ‑glTF ו‑FBX הכוללות נתוני חומרים. המרה ל‑STL תמיד מסירה חומרים. המרה ל‑OBJ מפשטת חומרים למודל הבסיסי של MTL.
- היררכיית סצנה נשמרת בין קבצי פורמט glTF. OBJ ו‑STL מייצרים מבנים שטוחים. ההיררכיה של FBX והוצאת החומרים אינם מאומתים במלואם בגרסה זו.
סיכום כולל
הנה דוגמה מלאה הטוענת קובץ OBJ, בודקת את הצמתים שלו, ומייצאת גם ל‑glTF וגם ל‑GLB:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
סיכום
Aspose.3D FOSS for Java מספק לך API עקבי על פני פורמטים מרובים. הנקודות המרכזיות:
- OBJ – החלפת רשתות פשוטה עם חומרים בסיסיים.
- STL – פורמט רק‑גאומטריה לצינורות הדפסת תלת‑ממד.
- glTF / GLB – פורמט מודרני תומך‑PBR לשימוש ברשת ובזמן אמת. השתמש
GltfSaveOptionsעםsetContentType(FileContentType.BINARY)ליצוא GLB. - FBX – ייבוא בלבד; פורמט עשיר לטעינת נכסים ממנועי משחק וכלי DCC.
השתמש במחלקות אפשרויות טעינה ושמירה ספציפיות לפורמט (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) כאשר אתה צריך שליטה מדוקדקת על תהליך הייבוא או הייצוא.
לפרטים נוספים, בקר ב- Aspose.3D תיעוד או עיין במקור ב GitHub.