אנו נרגשים להודיע על זמינות של Aspose.3D FOSS ל Java – ספרייה חופשית וקוד פתוח לעבודה עם פורמטים של קבצים תלת‑ממדיים ביישומי Java. נבנתה כפתרון Java טהור ללא תלותיות מקומיות, הספרייה פועלת על Java 21 ומעלה, מה שהופך אותה לנגישה למגוון רחב של פרויקטים וסביבות.

פוסט זה מסביר מה הספרייה מציעה, כיצד להתחיל, ולאן להמשיך מכאן.

מהו Aspose.3D FOSS עבור Java?

Aspose.3D FOSS ל Java היא ספריית עיבוד קבצים תלת‑ממדיים קלה משקל שפורסמה תחת ה רישיון MIT. היא מספקת API של גרף‑סצנה המאפשרת לטעון, לבדוק, לשנות ולשמור מודלים תלת‑ממדיים במגוון פורמטים נפוצים. הספרייה נכתבה במלואה ב-Java ואינה דורשת קבצים בינריים מקומיים חיצוניים או תצורות ספציפיות לפלטפורמה.

קוד המקור זמין ב‑GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

ההדגשים המרכזיים

  • טהור Java – ללא JNI, ללא ספריות מקומיות, ללא מגבלות פלטפורמה.
  • Java 21+ תואם.
  • ברישיון MIT – השתמש בו בפרויקטים אישיים, מסחריים או קנייניים ללא מגבלות.
  • ארכיטקטורת גרף סצנה – עץ מוכר של צמתים, רשתות, מצלמות וחומרים.
  • תמיכה בריבוי פורמטים – קריאה וכתיבה של קבצי OBJ, STL, glTF 2.0, ו-GLB; קריאת קבצי FBX.

התחלה מהירה

התקנת Maven

הוסף את התלות הבאה ל‑ pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

ההמרה הראשונה שלך

המקרה הפשוט ביותר הוא טעינת קובץ תלת‑ממדי בפורמט אחד ושמירתו בפורמט אחר. הנה המרה של שתי שורות מ‑OBJ ל‑STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

ה Scene class היא נקודת הכניסה המרכזית. קרא Scene.fromFile() עם נתיב קובץ לטעון מודל, ואז קרא save() עם נתיב היעד. הספרייה מניחה את הפורמט מהרחבת הקובץ.

בניית Scene מאפס

אתה יכול גם לבנות סצנות באופן תכנותי:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

זה יוצר סצנה חדשה, מוסיף צומת בן בשם “Box” תחת השורש, ממקם אותו בקואורדינטות (1, 2, 3), ומייצא את התוצאה כקובץ glTF.

טעינה עם אפשרויות ספציפיות לפורמט

כאשר אתה צריך שליטה מדויקת יותר בתהליך הטעינה, כל פורמט מספק מחלקת אפשרויות ייעודית. לדוגמה, טעינת קובץ STL עם אפשרויות מפורשות:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

ה Scene.fromFile() המתודה הסטטית מקבלת כל אחד מסוגי אפשרויות הטעינה: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, או FbxLoadOptions.

מעבר בגרף הסצנה

לאחר שהסצנה נטענה, ניתן לעבור על עץ הצמתים כדי לבדוק או לשנות את תוכנו:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

תבנית זו שימושית לאיתור באגים, יצירת דוחות על תוכן המודל, או שינוי סלקטיבי של חלקים בסצנה לפני יצוא מחדש.

החלת טרנספורמציות

מיקום צמתים במרחב 3D נעשה דרך ה Transform אובייקט על כל Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

הטרנספורמציות פועלות לפי מודל הירושה הסטנדרטי של הורה‑ילד: המיקום במרחב העולם של הילד הוא השילוב של הטרנספורמציה המקומית שלו וכל הטרנספורמציות של הצאצאים עד לשורש.

מה כלול

הספרייה מגיעה עם סט ממוקד של יכולות המתוכנן סביב מודל גרף הסצנה בתלת‑ממד.

גרף סצנה

גרף הסצנה הוא עמוד השדרה של ה‑API. כל קובץ תלת‑ממד מיוצג כמבנה עץ:

מחלקהתפקיד
Sceneמכולה ברמה העליונה; שורש גרף הסצנה
Nodeמיקום בעל שם בעץ; מחזיק טרנספורמציות וצמתים צאצאים
Entityבסיס מופשט לאובייקטים חזותיים המחוברים לצמתים
Meshגאומטריה פוליגונלית – קודקודים, פאות, נורמליות
Cameraהגדרת מצלמה וירטואלית
Transformתרגום, סיבוב וקנה מידה מקומיים לצומת
GlobalTransformטרנספורמציית מרחב העולם מחושבת

חומרים

הספרייה מספקת מודל חומר PBR (Physically Based Rendering):

  • PbrMaterial – חומר רינדור מבוסס פיזיקה עם albedo, metalness, roughness, emissive color, ו‑transparency. זהו המחלקה המוחשית היחידה של חומר הזמינה במהדורת Java.

כלי מתמטיקה

ה com.aspose.threed החבילה כוללת פרימיטיבים מתמטיים חיוניים:

  • Vector3 – וקטור של 3 רכיבים למיקומים, כיוונים וצבעים.
  • Matrix4 – מטריצה של 4x4 לשינויי טרנספורמציה.
  • Quaternion – ייצוג סיבוב.
  • BoundingBox – תיבת גבול מיושרת לציר לשאילתות מרחביות.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

אפשרויות טעינה ושמירה

לכל פורמט יש מחלקות אפשרות ייעודיות שמאפשרות לך לשלוט בהתנהגות הייבוא והייצוא:

פורמטטען אפשרויותשמור אפשרויות
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (יבוא בלבד)

לדוגמה, כדי לייצא glTF עם JSON בפורמט קריא ועם מערכת קואורדינטות הפוכה:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

פורמטים נתמכים

הטבלה שלהלן מסכמת את הפורמטים ש-Aspose.3D FOSS עבור Java יכול לקרוא ולכתוב.

פורמטסיומתייבאייצאהערות
OBJ.objכןכןעם חומרים MTL
STL.stlכןכןבינארי + ASCII
glTF 2.0.gltfכןכןפורמט JSON
GLB.glbכןכןבינארי glTF באמצעות GltfSaveOptions
FBX.fbxכןלאייבוא בלבד

OBJ, STL, glTF ו-GLB תומכים הן בטעינה והן בשמירה. FBX נתמך רק לייבוא.

מדריך לבחירת פורמט

בחירת הפורמט הנכון תלויה במקרה השימוש שלך:

  • OBJ הוא אידיאלי כאשר אתה צריך תאימות מרבית בין כלי 3D. כמעט כל יישום מודלינג יכול לקרוא ולכתוב OBJ. הוא עובד היטב להחלפת נתוני רשת אך מעביר רק מידע חומר בסיסי דרך קבצי MTL נלווים.
  • STL הוא הפורמט המועדף לעבודה עם הדפסת תלת‑ממד. הוא מאחסן גאומטריה משולשת גולמית ללא חומרים או היררכיית סצנה, שזה בדיוק מה שתוכנת החיתוך מצפה. אם הצינור שלך מסתיים במדפסת תלת‑ממד, STL הוא הבחירה הפשוטה.
  • glTF הוא הסטנדרט המודרני לאינטרנט ול‑3D בזמן אמת. הוא תומך בחומרי PBR, במבני סצנה מלאים, ועוצב להעברה יעילה. השתמשו ב‑glTF בעת בניית מציגים מבוססי אינטרנט, עבודה עם three.js או Babylon.js, או מטרה של כל צינור רינדור בזמן אמת.
  • FBX משולב באופן עמוק בתהליכי פיתוח משחקים ויצירת תוכן דיגיטלי. הוא תומך בנתוני סצנה עשירים כולל היררכיות וחומרים. Aspose.3D FOSS עבור Java תומך ב‑FBX ייבוא בלבד – השתמשו בו לטעינת נכסי FBX ולהמרתם לפורמטים אחרים.

מגבלות ידועות

חשוב לציין ש Scene.render() הוא לא נתמך בגרסת ה‑FOSS. קריאה לשיטה זו תגרום ל‑ UnsupportedOperationException. הספרייה נועדה לעיבוד תלת‑ממד מבוסס קבצים – טעינה, מניפולציה, שינוי ושמירת מודלים – במקום רינדור בזמן אמת לתצוגה.

קוד פתוח ורישוי

Aspose.3D FOSS עבור Java שוחרר תחת ה‑ רישיון MIT. משמעות הדבר שאתה חופשי ל‑:

  • להשתמש בספרייה ביישומים מסחריים וקנייניים.
  • לשנות את קוד המקור כך שיתאים לצרכיכם.
  • הפץ את הספרייה כחלק מהתוכנה שלך.

אין דמי רויאל, אין מגבלות שימוש, ואין דרישות ייחוס מעבר למה שמפרט רישיון MIT.

קוד המקור המלא מתארח ב‑GitHub, ותרומות מוזמנות: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

דרישות מערכת

דרישהפרט
Java גרסה21 or later
תלויותאין (טהור Java)
פלטפורמותכל פלטפורמה שמריצה JVM
כלי בנייהMaven (מומלץ)

התחלה

הנה המשאבים שיעזרו לך להתחיל ולהתפעל:

  • תיעוד – מדריכים מקיפים והסברים של API זמינים ב- Aspose.3D אתר תיעוד.
  • מאגר ידע – מאמרים מעשיים של איך-לעשות וטיפים לפתרון בעיות ב- Aspose.3D KB.
  • מפרט API – התייחסות מפורטת למחלקות ולשיטות ב- Aspose.3D מפרט API.
  • קוד מקור – עיין ותרום ב- GitHub.
  • Maven Central – החבילה מתפרסמת כ- com.aspose:aspose-3d-foss ב-Maven Central.

מקרים נפוצים לשימוש

הנה כמה תרחישים מעשיים שבהם Aspose.3D FOSS עבור Java מתאים היטב:

צינורות המרת פורמטים

צוותים רבים מקבלים נכסי 3D בפורמט אחד אך זקוקים להם בפורמט אחר. צוות עיצוב עשוי לעבוד ב‑FBX בעוד צוות האינטרנט צריך glTF. הספרייה מאפשרת לבנות צינורות המרה אוטומטיים:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

לפני אינטגרציית נכס תלת‑ממדי באפליקציה שלך, ייתכן שתרצה לאמת את תוכנו — לבדוק מספר צמתים, לאמת את הגאומטריה, או לאשר שהאלמנטים הצפויים קיימים:

Scene scene = Scene.fromFile("model.obj");

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

הרכבת סצנה

אתה יכול לטעון מודלים מרובים ולשלב אותם לסצנה אחת:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

מה הלאה

בפוסטים הקרובים, נסקור:

  • העמקה בתכונות המרכזיות של API גרף הסצנה, חומרים, וכלי מתמטיקה.
  • מדריך מעשי לעבודה עם כל פורמט תלת‑ממדי נתמך — OBJ, STL, glTF, ו‑FBX — כולל אפשרויות טעינה/שמירה ותבניות המרה במצב אצווה.

הישארו מעודכנים, ואל תהססו לחקור את הספרייה ולשתף את המשוב שלכם ב‑GitHub.