ב פוסט מבוא, סקרנו מה Aspose.3D FOSS for Java הוא וכיצד להתחיל. פוסט זה מתעמק בתכונות המרכזיות שמרכיבות את הספרייה, עם דוגמאות קוד לכל תחום.
כל הדוגמאות מניחות את הייבוא הבא:
import com.aspose.threed.*;
וההתלות ב‑Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
API של גרף הסצנה
גרף הסצנה הוא הבסיס של Aspose.3D FOSS for Java. כל מודל תלת‑ממדי – בין אם נטען מקובץ או נבנה תכנותית – מיוצג כעץ של צמתים שמושרש ב Scene אובייקט.
סצנה
ה Scene מחלקה היא נקודת הכניסה לכל הפעולות. ניתן ליצור סצנה ריקה או לטעון אחת מקובץ:
// Empty scene
Scene scene = new Scene();
// Load from file
Scene loaded = Scene.fromFile("model.obj");
// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());
שורש עץ הצמתים נגיש דרך getRootNode().
צומת
א Node מייצג מיקום בשם בעץ הסצנה. צמתים יכולים להכיל ילדים, היוצרים היררכיה. כל צומת נושא מקומי Transform ו‑חישוב GlobalTransform.
Scene scene = new Scene();
// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");
// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");
ניתן גם לבנות צמתים באופן עצמאי ולצרף אותם מאוחר יותר:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity ו‑Mesh
א Entity הוא מחלקת בסיס מופשטת לכל דבר שניתן לצרף לצומת – גאומטריה, מצלמות ותאורות. סוג הישות הנפוץ ביותר הוא Mesh, שמחזיקה גאומטריה פוליגונלית (קודקודים, משטחים ונורמליות).
Scene scene = Scene.fromFile("cube.obj");
// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println("Node: " + child.getName());
System.out.println(" Vertices: " + mesh.getControlPoints().size());
}
}
Camera
Camera הן ישויות שמצורפות לצמתים:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
הערה: ה Camera ה‑class בגרסת Java הוא stub מינימלי עם constructors בלבד. ישויות Camera המחוברות לצמתים הן לא נכתב בעת ייצוא ל‑glTF או לכל פורמט אחר — ה‑glTF exporter מעבד רק Mesh ישויות. אל תסמכו על כך שנתוני camera יישמרו בקבצים המיוצאים.
הערה: ה Light המחלקה אינה זמינה בגרסת Java. נתוני התאורה של הסצנה מקבצים מיובאים נשמרים כ‑generic Entity אובייקטים.
טעינה ושמירה ללא תלות בפורמט
אחת החוזקות של הספרייה היא שהגרף של הסצנה אינו תלוי בפורמט. אתה טוען מכל פורמט נתמך, מנהל את הסצנה דרך API יחיד, ושומר לכל פורמט נתמך.
// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");
// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");
// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);
הפורמט נקבע לפי סיומת הקובץ. ניתן גם להעביר אפשרויות שמירה מפורשות כדי לשלוט בפלט:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
חומרים
Aspose.3D FOSS עבור Java מספק מודל חומר PBR (Physically Based Rendering) דרך PbrMaterial. זהו המחלקה המוחשית היחידה לחומר בגרסת Java.
PbrMaterial
חומר רינדור פיזיקלי המבוסס על אלבדו, מתכתיות ופרמטרי גסות. זהו מודל החומר הסטנדרטי עבור glTF ומנועים מודרניים בזמן אמת.
PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0); // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness
שמירת החומר בין פורמטים תלויה ביכולות של פורמט היעד. חומרים PBR ממופים באופן טבעי לפלט glTF ו‑GLB.
טרנספורם ומרחב
כל Node בגרף הסצנה יש Transform שקובע את המיקום, הסיבוב והקנה שלו ביחס להורה שלו.
טרנספורם מקומי
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3); // Position
t.setScale(2, 2, 2); // Uniform scale
t.setEulerAngles(0, 45, 0); // Euler rotation in degrees
טרנספורם גלובלי
ה GlobalTransform הוא הטרנספורם בחלל העולם המחושב, שלוקח בחשבון את כל שרשרת ההורים. הוא קריאה‑בלבד ומתעדכן אוטומטית.
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();
ירושה זו של טרנספורם בין הורה לילד פועלת לפי תבנית גרף הסצנה הסטנדרטית המשמשת מנועי 3D וכלי DCC.
כלי מתמטיקה
הספרייה כוללת סוגי מתמטיקה בסיסיים לפעולות תלת‑ממדיות.
Vector3
וקטור בעל שלושה רכיבים המשמש למיקומים, כיוונים, נורמליות וצבעים.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)
Matrix4
מטריצת שינוי בגודל 4x4 המשמשת לשילוב תזוזה, סיבוב וקנה מידה בפעולה אחת.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
ייצוג סיבוב המונע נעילת גימבל ומבצע אינטרפולציה חלקה. קווטרניונים משמשים פנימית במערכת ההמרה.
BoundingBox
תיבת גבול מיושרת לציר לשאילתות מרחביות, בדיקות התנגשות וניתוח סצנה.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be constructed directly with min/max Vector3 values
הערה: Node.getBoundingBox() ו Entity.getBoundingBox() עדיין לא מומשו. שניהם מחזירים empty BoundingBox (עם sentinel Double.MAX_VALUE / Double.MIN_VALUE values) ללא קשר לגיאומטריית הרשת. אל תשתמשו בשיטות אלו כדי לחשב גבולות גיאומטריים אמיתיים בגרסה זו.
מגבלות ידועות
ראוי לציין ש Scene.render() הוא לא נתמך בגרסת ה‑FOSS. קריאה אליו תגרום ל‑ UnsupportedOperationException.הספרייה נועדה לעיבוד תלת‑ממדי מבוסס קבצים – טעינה, שינוי ושמירה – ולא להדמיה בזמן אמת.
סיכום
התכונות המרכזיות של Aspose.3D FOSS עבור Java מחולקות לחמישה תחומים:
| אזור | מחלקות | מטרה |
|---|---|---|
| גרף סצנה | Scene, Node, Entity, Mesh, Camera | ייצוג מודל היררכי |
| פורמטים | אפשרויות טעינה/שמירה עבור OBJ, STL, glTF/GLB; טעינה עבור FBX | קלט/פלט בלתי תלוי בפורמט |
| חומרים | PbrMaterial | מראה פני השטח (PBR) |
| טרנספורמציות | Transform, GlobalTransform | מיקום מרחבי |
| מתמטיקה | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
בפוסט הבא נעבור על מדריכים מעשיים פורמט‑אחר‑פורמט הכוללים OBJ, STL, glTF ו‑FBX עם אפשרויות טעינה ושמירה מפורטות.