في الـ منشور المقدمة, غطينا ما هو Aspose.3D FOSS لـ Java وكيفية البدء. يتعمق هذا المنشور أكثر في الميزات الرئيسية التي تشكل المكتبة، مع أمثلة شفرة لكل مجال.
جميع الأمثلة تفترض الاستيراد التالي:
import com.aspose.threed.*;
وإضافة Maven التالية:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
واجهة برمجة تطبيقات مخطط المشهد
مخطط المشهد هو الأساس لـ Aspose.3D FOSS لـ 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);
الكيان و 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());
}
}
الكاميرا
الكاميرات هي كيانات تُرفق بالعقد:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
يتم الحفاظ على تعريفات الكاميرا عند التصدير إلى صيغ تدعمها (مثل glTF).
ملاحظة: ال Light الفئة غير متوفرة في نسخة Java. يتم تخزين بيانات إضاءة المشهد من الملفات المستوردة كـ generic Entity كائنات.
تحميل وحفظ غير معتمد على الصيغة
إحدى نقاط القوة في المكتبة هي أن رسم المشهد غير معتمد على الصيغة. يمكنك التحميل من أي صيغة مدعومة، تعديل المشهد عبر واجهة برمجة تطبيقات واحدة، ثم الحفظ إلى أي صيغة مدعومة.
// 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
مادة تعتمد على الإضاءة الفيزيائية وتستخدم معلمات albedo و metalness و roughness. هذا هو نموذج المادة القياسي لـ 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 في الـ scene graph لديه 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 هو الـ world-space transform المحسوب، مع الأخذ في الاعتبار سلسلة الوالدين بالكامل. هذا للقراءة فقط ويتم تحديثه تلقائيًا.
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 – متجه مكوّن من 3 مكونات للمواقع، الاتجاهات، والألوان.
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
تمثيل للدوران يتجنب قفل الجيمبال ويُستَفَاز بسلاسة. تُستخدم الـ Quaternions داخليًا بواسطة نظام التحويل.
BoundingBox
BoundingBox محاذى للمحاور للاستعلامات المكانية، وفحوصات التصادم، وتحليل المشهد.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
القيود المعروفة
من الجدير بالذكر أن 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 مع خيارات تحميل وحفظ مفصلة.