نحن متحمسون للإعلان عن توفر Aspose.3D FOSS لـ Java – مكتبة مجانية ومفتوحة المصدر للعمل مع صيغ ملفات 3D في تطبيقات Java. تم بناؤها كحل Java نقي دون أي تبعيات أصلية، وتعمل المكتبة على Java 21 وما بعده، مما يجعلها متاحة لمجموعة واسعة من المشاريع والبيئات.
تستعرض هذه المقالة ما تقدمه المكتبة، وكيفية البدء، وإلى أين يمكنك التوجه من هنا.
ما هو Aspose.3D FOSS لـ Java؟?
Aspose.3D FOSS لـ Java هي مكتبة معالجة ملفات 3D خفيفة الوزن منشورة تحت MIT license. توفر API للرسم البياني للمشهد تتيح لك تحميل، فحص، تحويل، وحفظ نماذج 3D عبر عدة صيغ شائعة الاستخدام. المكتبة مكتوبة بالكامل بلغة 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 الفئة هي نقطة الدخول المركزية. استدعِ Scene.fromFile() مع مسار ملف لتحميل نموذج، ثم استدعِ save() مع مسار الهدف. تستنتج المكتبة الصيغة من امتداد الملف.
بناء مشهد من الصفر
يمكنك أيضًا إنشاء المشاهد برمجيًا:
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());
}
}
}
}
هذا النمط مفيد لتصحيح الأخطاء، إنشاء تقارير حول محتويات النموذج، أو تعديل أجزاء معينة من المشهد بشكل انتقائي قبل إعادة تصديره.
تطبيق التحويلات
يتم تموضع العقد في الفضاء ثلاثي الأبعاد عبر 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");
}
}
تتبع التحويلات نموذج الوراثة القياسي بين الأصل والابن: موضع الطفل في الفضاء العالمي هو مزيج التحويل المحلي وجميع التحويلات للأجداد حتى الجذر.
ما المتضمن
تأتي المكتبة بمجموعة مركزة من القدرات المصممة حول نموذج مخطط المشهد ثلاثي الأبعاد.
مخطط المشهد
مخطط المشهد هو العمود الفقري لواجهة برمجة التطبيقات. كل ملف ثلاثي الأبعاد يُمثَّل كهيكل شجري:
| الفئة | الدور |
|---|---|
Scene | حاوية المستوى الأعلى؛ جذر مخطط المشهد |
Node | موضع مسمى في الشجرة؛ يحتوي على التحويلات والعقد الفرعية |
Entity | قاعدة تجريدية للكائنات البصرية المرتبطة بالعُقد |
Mesh | هندسة متعددة الأضلاع – الرؤوس، الوجوه، المتجهات العمودية |
Camera | تعريف الكاميرا الافتراضية |
Transform | إزاحة محلية، دوران، وتكبير لعقدة |
GlobalTransform | التحويل المحسوب في الفضاء العالمي |
المواد
توفر المكتبة نموذج مادة PBR (Physically Based Rendering):
- PbrMaterial – مادة تجسيدية معتمدة على الفيزياء مع اللون الأساسي، المعدن، الخشونة، اللون المنبعث، والشفافية. هذه هي الفئة المادية الملموسة الوحيدة المتاحة في نسخة 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)
خيارات التحميل والحفظ
كل تنسيق يحتوي على فئات خيارات مخصصة تتيح لك التحكم في سلوك الاستيراد والتصدير:
| تنسيق | تحميل الخيارات | حفظ الخيارات |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (استيراد فقط) |
على سبيل المثال، لتصدير 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 | نعم | نعم | Binary glTF عبر GltfSaveOptions |
| FBX | .fbx | نعم | لا | استيراد فقط |
تدعم OBJ و STL و glTF و GLB كل من التحميل والحفظ. يتم دعم FBX للاستيراد فقط.
دليل اختيار الصيغة
اختيار الصيغة المناسبة يعتمد على حالة الاستخدام الخاصة بك:
- OBJ مثالي عندما تحتاج إلى أقصى توافق عبر أدوات 3D. تقريبًا كل تطبيق نمذجة يمكنه قراءة وكتابة OBJ. يعمل بشكل جيد لتبادل بيانات الشبكة لكنه يحمل فقط معلومات مادة أساسية عبر ملفات MTL المرافقة.
- STL هو الصيغة المفضلة لتدفقات عمل الطباعة ثلاثية الأبعاد. يخزن الهندسة المثلثية الخام دون مواد أو هيكلية مشهد، وهو بالضبط ما تتوقعه برامج القطع. إذا انتهت خط أنابيبك عند طابعة 3D، فإن 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 License. هذا يعني أنك حر في:
- استخدام المكتبة في التطبيقات التجارية والملكية.
- تعديل شفرة المصدر لتناسب احتياجاتك.
- وزع المكتبة كجزء من برنامجك الخاص.
لا توجد رسوم ملكية، ولا حدود للاستخدام، ولا متطلبات إسناد تتجاوز ما تحدده رخصة MIT.
الكود المصدري الكامل مستضاف على GitHub، والمساهمات مرحب بها: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
متطلبات النظام
| المتطلبات | التفاصيل |
|---|---|
| Java الإصدار | 21 or later |
| التبعيات | لا شيء (نقي Java) |
| المنصات | أي منصة تشغّل JVM |
| أداة بناء | Maven (مُوصى به) |
البدء
إليك الموارد التي تساعدك على البدء والعمل:
- التوثيق – الأدلة الشاملة وجولات API متاحة على Aspose.3D موقع الوثائق.
- قاعدة المعرفة – مقالات إرشادية عملية ونصائح استكشاف الأخطاء وإصلاحها في the Aspose.3D KB.
- API Reference – مرجع تفصيلي للفئات والطرق في Aspose.3D API Reference.
- Source Code – تصفح وساهم في 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");
ما التالي
في المشاركات القادمة، سنغطي:
- غوص عميق في الميزات الرئيسية لواجهة برمجة تطبيقات مخطط المشهد، والمواد، وأدوات الرياضيات.
- دليل عملي للعمل مع كل تنسيق ثلاثي الأبعاد مدعوم – OBJ، STL، glTF، و FBX – بما في ذلك خيارات التحميل/الحفظ وأنماط التحويل الجماعي.
تابعنا، ولا تتردد في استكشاف المكتبة ومشاركة ملاحظاتك على GitHub.