Aspose.3D FOSS برای Java از پنج فرمت فایل 3D پشتیبانی می‌کند: OBJ, STL, glTF, GLB, و FBX (فقط برای وارد کردن).

تمام مثال‌ها از com.aspose.threed.* بسته:

import com.aspose.threed.*;

وابستگی Maven:

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

نمای کلی فرمت‌ها

قبل از شروع، اینجا یک مرور سریع از چهار فرمت پشتیبانی‌شده و موارد استفاده معمول آن‌ها ارائه شده است.

فرمتپسوندوارد کردنصادر کردنپشتیبانی متریالسلسله‌مراتبی صحنه
OBJ.objبلهبلهپایه (فایل‌های MTL)مسطح
STL.stlبلهبلههیچمسطح
glTF 2.0.gltfبلهبلهPBRکامل
GLB.glbبلهبلهPBRکامل
FBX.fbxبلهنهثروتمندکامل

OBJ، STL، glTF و GLB هر دو واردات و صادرات را پشتیبانی می‌کنند. FBX فقط برای واردات فقط. GLB (binary glTF) از طریق تولید می‌شود GltfSaveOptions با setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ یکی از پرپشتیبانی‌ترین فرمت‌های مش سه‌بعدی است. این فرمت هندسه را به صورت متن ساده ذخیره می‌کند، با یک .mtl فایل همراه برای مواد.

بارگذاری فایل‌های OBJ

ساده‌ترین روش این است که مسیر فایل را به‌صورت مستقیم پاس دهید:

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

برای کنترل بیشتر، از ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

وقتی فایل OBJ به یک فایل MTL ارجاع می‌دهد (از طریق یک mtllib دستور)، کتابخانه سعی می‌کند تعاریف مواد را به‌صورت خودکار از آن بارگذاری کند. فایل MTL باید در همان دایرکتوری که فایل OBJ قرار دارد یا در مسیری که در دستور مشخص شده است، باشد.

ذخیره به‌صورت OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

موارد استفاده از OBJ

  • تبادل داده‌های مش بین ابزارهای مختلف سه‌بعدی.
  • وارد کردن مدل‌ها از کتابخانه‌های دارایی که به فرمت OBJ توزیع می‌شوند.
  • بازرسی سریع هندسه بدون سلسله‌مراتب صحنه‌های پیچیده.

STL: استریولیتوگرافی

STL فرمت استاندارد برای چاپ سه‌بعدی است. این فرمت هندسهٔ مثلثی‌سازی شدهٔ خام را بدون مواد، رنگ‌ها یا سلسله‌مراتب صحنه نشان می‌دهد. فایل‌های STL در دو نوع موجود هستند: ASCII (قابل خواندن برای انسان) و باینری (فشرده).

بارگذاری فایل‌های STL

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

ذخیره به عنوان STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

برای کنترل خروجی، از StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

ملاحظات STL

  • فایل‌های STL فقط شامل هندسهٔ مثلثی هستند. مواد، بافت‌ها و سلسله‌مراتب صحنه در هنگام خروجی‌گیری از دست می‌روند.
  • STL باینری برای مدل‌های بزرگ به‌مراتب کوچکتر از STL متنی (ASCII) است.
  • STL فرمت مورد ترجیح است وقتی هدف چاپگر سه‌بعدی یا نرم‌افزار برش (slicer) باشد.

glTF: فرمت انتقال GL

glTF یک فرمت مدرن است که برای انتقال و بارگذاری کارآمد محتوای سه‌بعدی، به‌ویژه در وب و برنامه‌های زمان واقعی طراحی شده است. این فرمت از مواد PBR، سلسله‌مراتب صحنه و انیمیشن‌ها پشتیبانی می‌کند.

در حال بارگذاری فایل‌های glTF

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

ذخیره به‌صورت glTF

ذخیره‌سازی پایه از پسوند فایل برای تعیین فرمت استفاده می‌کند:

scene.save("output.gltf");

برای کنترل دقیق، از GltfSaveOptions:

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

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

جزئیات GltfSaveOptions

روشهدف
setFlipCoordinateSystem(boolean)محور سیستم مختصات را هنگام خروجی‌گیری معکوس کنید. هنگام تبدیل از Y‑up به Z‑up یا برعکس مفید است.
setPrettyPrint(boolean)JSON خروجی را با تورفتگی برای خوانایی قالب‌بندی کنید. مقدار را تنظیم کنید به false برای حجم فایل کوچکتر در تولید.

موارد استفاده از glTF

  • نمایشگرهای سه‌بعدی وب‌محور (three.js، Babylon.js).
  • برنامه‌های زمان واقعی و موتورهای بازی.
  • حفظ تعاریف مواد PBR در بین ابزارها.

FBX: Filmbox (فقط وارد کردن)

FBX یک فرمت اختصاصی توسط Autodesk است که به‌طور گسترده‌ای در توسعه بازی و ایجاد محتوای دیجیتال استفاده می‌شود. این فرمت از سلسله‌مراتب صحنه‌های غنی، مواد و انیمیشن‌ها پشتیبانی می‌کند. Aspose.3D FOSS برای Java از FBX برای فقط وارد کردن – صادرات به FBX در دسترس نیست.

بارگذاری فایل‌های FBX

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

تبدیل FBX به فرمت‌های دیگر

از آنجا که خروجی FBX پشتیبانی نمی‌شود، صحنه‌های FBX وارد شده را به glTF، GLB، OBJ یا STL تبدیل کنید:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

موارد استفاده از FBX

  • وارد کردن دارایی‌ها از ابزارهای Autodesk (Maya، 3ds Max) و تبدیل آن‌ها به فرمت‌های دیگر.
  • در حال بارگذاری شخصیت‌های ریگ‌شده و صحنه‌های انیمیشنی برای صادرات مجدد به glTF/GLB.

تبدیل دسته‌ای

یک جریان کاری رایج، تبدیل یک پوشه کامل از فایل‌ها از یک فرمت به فرمت دیگر است. در اینجا یک الگو برای تبدیل دسته‌ای آورده شده است:

import com.aspose.threed.*;
import java.io.File;

public class BatchConvert {
    public static void main(String[] args) throws Exception {
        File inputDir = new File("models/obj");
        File outputDir = new File("models/gltf");
        outputDir.mkdirs();

        GltfSaveOptions saveOpts = new GltfSaveOptions();
        saveOpts.setPrettyPrint(true);

        File[] objFiles = inputDir.listFiles(
            (dir, name) -> name.toLowerCase().endsWith(".obj")
        );

        if (objFiles == null) return;

        for (File objFile : objFiles) {
            String baseName = objFile.getName()
                .replaceFirst("\\.obj$", "");

            Scene scene = Scene.fromFile(objFile.getAbsolutePath());
            String outPath = new File(outputDir, baseName + ".gltf")
                .getAbsolutePath();

            scene.save(outPath, saveOpts);
            System.out.println("Converted: " + objFile.getName()
                + " -> " + baseName + ".gltf");
        }
    }
}

این همه را بارگذاری می‌کند .obj فایل در یک پوشه، هر کدام را به glTF با خروجی قالب‌بندی زیبا تبدیل می‌کند و نتایج را ذخیره می‌نماید. می‌توانید این الگو را برای هر ترکیب فرمت منبع و مقصدی سازگار کنید.

مرجع تبدیل بین فرمت‌ها

جدول زیر نشان می‌دهد که هنگام تبدیل بین فرمت‌ها چه انتظاری داشته باشید.

ازبههندسهمتریال‌هاسلسله‌مراتبیادداشت‌ها
OBJSTLحفظ شدهاز دست رفتهN/ASTL هیچ پشتیبانی از متریال ندارد
OBJglTF/GLBحفظ شدهبه PBR تبدیل شدهمسطحمتریال‌های MTL در صورت امکان نگاشت شد
STLOBJحفظ شدههیچN/Aهیچ متریالی در منبع وجود ندارد
STLglTF/GLBحفظ شدهپیش‌فرضمسطحماده پیش‌فرض اعمال شد
glTFOBJحفظ شدهساده‌سازی شدهمسطح شدهPBR به متریال پایه
glTFSTLحفظ‌شدهاز دست رفتهمسطح‌شدهفقط هندسه
FBXOBJحفظ‌شدهساده‌شدهمسطح‌شدهساده‌سازی مواد
FBXSTLحفظ شدهاز دست رفتهمسطح شدهفقط هندسه
FBXglTF/GLBحفظ شدهتبدیل به PBRحفظ شدهدقت خوب

راهنمای کلی تبدیل

  • هندسه همیشه در تمام جفت‌های فرمت حفظ می‌شود.
  • مواد بهترین سازگاری بین glTF و FBX است که هر دو مدل‌های متریال غنی را پشتیبانی می‌کنند. تبدیل به STL همیشه متریال‌ها را حذف می‌کند. تبدیل به OBJ متریال‌ها را به مدل پایه MTL ساده می‌کند.
  • سلسله‌مراتبی صحنه در بین glTF و FBX حفظ می‌شود. OBJ و STL ساختارهای مسطح تولید می‌کنند.

جمع‌بندی همه موارد

در اینجا یک مثال کامل آورده شده است که یک فایل OBJ را بارگذاری می‌کند، گره‌های آن را بررسی می‌کند و به هر دو فرمت glTF و GLB صادر می‌نماید:

import com.aspose.threed.*;

public class FormatWorkflow {
    public static void main(String[] args) throws Exception {
        // Load
        Scene scene = Scene.fromFile("input.obj");

        // Inspect
        System.out.println("Nodes in scene:");
        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("  " + child.getName());
            Transform t = child.getTransform();
            System.out.println("    Translation: "
                + t.getTranslation());
        }

        // Export to glTF with options
        GltfSaveOptions gltfOpts = new GltfSaveOptions();
        gltfOpts.setPrettyPrint(true);
        scene.save("output.gltf", gltfOpts);

        // Export to GLB (binary glTF)
        GltfSaveOptions glbOpts = new GltfSaveOptions();
        glbOpts.setContentType(FileContentType.BINARY);
        scene.save("output.glb", glbOpts);

        System.out.println("Export complete.");
    }
}

خلاصه

Aspose.3D FOSS for Java به شما یک API سازگار در چندین فرمت ارائه می‌دهد. نکات کلیدی:

  • OBJ – تبادل مش ساده با متریال‌های پایه.
  • STL – فرمت فقط هندسی برای خطوط لوله چاپ سه‌بعدی.
  • glTF / GLB – فرمت مدرن با قابلیت PBR برای استفاده در وب و زمان واقعی. استفاده کنید GltfSaveOptions با setContentType(FileContentType.BINARY) برای خروجی GLB.
  • FBX – فقط برای وارد کردن؛ فرمت غنی برای بارگذاری دارایی‌ها از موتورهای بازی و ابزارهای DCC.

از کلاس‌های گزینهٔ بارگذاری و ذخیره‌سازی مخصوص فرمت استفاده کنید (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) زمانی که به کنترل دقیق بر فرآیند واردات یا صادرات نیاز دارید.

برای جزئیات بیشتر، به Aspose.3D مستندات یا منبع را در GitHub.