ما خوشحالیم که اعلام کنیم در دسترس است Aspose.3D FOSS برای Java – یک کتابخانهٔ رایگان و متنباز برای کار با فرمتهای فایل 3D در برنامههای Java. بهعنوان یک راهحل خالص Java بدون وابستگیهای بومی ساخته شده است، این کتابخانه بر روی Java 21 و نسخههای بعدی اجرا میشود و دسترسی آن را برای طیف وسیعی از پروژهها و محیطها ممکن میسازد.
این پست به بررسی آنچه کتابخانه ارائه میدهد، نحوه شروع کار و مسیر پیشرو میپردازد.
Aspose.3D FOSS برای Java چیست؟?
Aspose.3D FOSS برای Java یک کتابخانهٔ سبک وزن پردازش فایلهای 3D است که تحت MIT license. این یک API گراف صحنه فراهم میکند که به شما امکان بارگذاری، بازرسی، تبدیل و ذخیرهٔ مدلهای 3D را در چندین فرمت پرکاربرد میدهد. این کتابخانه بهطور کامل به Java نوشته شده است و نیازی به باینریهای بومی خارجی یا پیکربندیهای خاص پلتفرم ندارد.
کد منبع در گیتهاب در دسترس است: 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>
تبدیل اول شما
سادهترین مورد استفاده، بارگذاری یک فایل 3D در یک قالب و ذخیرهسازی آن در قالب دیگر است. در اینجا یک تبدیل دو خطی از 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() با مسیر هدف. کتابخانه قالب را از پسوند فایل استنتاج میکند.
ساخت صحنه از ابتدا
همچنین میتوانید صحنهها را بهصورت برنامهنویسی ایجاد کنید:
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() متد static هر یک از انواع گزینههای load را میپذیرد: 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");
}
}
تبدیلها مدل استاندارد وراثت والد‑فرزند را دنبال میکنند: موقعیت فضای جهانی یک فرزند ترکیبی از تبدیل محلی آن و تمام تبدیلهای اجدادی تا ریشه است.
چه چیزهایی شامل میشود
این کتابخانه با مجموعهای متمرکز از قابلیتها که حول مدل گراف صحنه 3D طراحی شدهاند، ارائه میشود.
گراف صحنه
گراف صحنه ستون فقرات API است. هر فایل 3D به صورت ساختار درختی نمایش داده میشود:
| کلاس | نقش |
|---|---|
Scene | محفظه سطح بالا؛ ریشهٔ گراف صحنه |
Node | موقعیت نامگذاریشده در درخت؛ شامل تبدیلات و گرههای فرزند |
Entity | پایهٔ انتزاعی برای اشیای بصری متصل به گرهها |
Mesh | هندسهٔ چندضلعی — رئوس، سطوح، نرمالها |
Camera | تعریف دوربین مجازی |
Transform | ترجمه، چرخش و مقیاس محلی برای یک گره |
GlobalTransform | تبدیلات محاسبهشده در فضای جهان |
متریالها
کتابخانه یک مدل متریال PBR (رندر فیزیکی مبتنی بر) فراهم میکند:
- PbrMaterial – physically based rendering material با albedo، metalness، roughness، رنگ emissive و شفافیت. این تنها کلاس مادهٔ ملموس موجود در نسخهٔ Java است.
ابزارهای ریاضی
این com.aspose.threed بسته شامل primitiveهای اساسی ریاضی است:
- Vector3 – بردار ۳ مؤلفهای برای موقعیتها، جهتها و رنگها.
- Matrix4 – ماتریس تبدیل ۴×۴.
- 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 هنگامی که به حداکثر سازگاری بین ابزارهای سهبعدی نیاز دارید، ایدهآل است. تقریباً هر برنامه مدلسازی میتواند OBJ را بخواند و بنویسد. برای تبادل دادههای مش مناسب است اما فقط اطلاعات پایهای مواد را از طریق فایلهای همراه MTL منتقل میکند.
- STL فرمت مورد انتخاب برای جریانهای کاری چاپ سهبعدی است. این فرمت هندسهٔ مثلثیسازی شدهٔ خام را بدون مواد یا سلسلهمراتب صحنه ذخیره میکند، که دقیقاً همان چیزی است که نرمافزارهای اسلایسر انتظار دارند. اگر مسیر شما در یک چاپگر سهبعدی پایان مییابد، STL گزینهٔ ساده و مستقیم است.
- glTF استاندارد مدرن برای وب و سهبعدی زمان واقعی است. از مواد PBR، سلسلهمراتب کامل صحنه پشتیبانی میکند و برای انتقال کارآمد طراحی شده است. هنگام ساخت نمایشگرهای مبتنی بر وب، کار با three.js یا Babylon.js، یا هدفگذاری برای هر خط لولهٔ رندرینگ زمان واقعی از glTF استفاده کنید.
- FBX بهطور عمیق در جریانهای کاری توسعه بازی و ایجاد محتوای دیجیتال یکپارچه شده است. دادههای صحنهٔ غنی شامل سلسلهمراتب و مواد را پشتیبانی میکند. Aspose.3D FOSS برای Java از FBX پشتیبانی میکند فقط import – از آن برای بارگذاری داراییهای 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 سایت مستندات.
- پایگاه دانش – مقالات عملی «چگونه» و نکات عیبیابی در 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
قبل از ادغام یک دارایی 3D در برنامهٔ خود، ممکن است بخواهید محتویات آن را اعتبارسنجی کنید — بررسی تعداد گرهها، تأیید هندسه، یا اطمینان از حضور عناصر مورد انتظار:
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 گراف صحنه، متریالها، و ابزارهای ریاضی.
- راهنمای عملی برای کار با هر فرمت 3D پشتیبانیشده — OBJ، STL، glTF و FBX — شامل گزینههای بارگذاری/ذخیره و الگوهای تبدیل دستهای.
منتظر بمانید و آزاد باشید کتابخانه را کاوش کنید و بازخورد خود را در GitHub به اشتراک بگذارید.