Aspose.3D FOSS для Java підтримує п’ять форматів файлів 3D: OBJ, STL, ГЛТФ, GLB, і FBX Цей пост є практичним, формат-по-формат керівником, який показує, як завантажувати і зберігати кожен з них, які варіанти доступні, і як конвертувати між ними.

Всі приклади використовують com.aspose.threed.* Пакетний пакет :

import com.aspose.threed.*;

Залежність від мав:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Формат ландшафту

Перед поглинанням, ось швидкий перегляд чотирьох підтримуваних форматів і їх типових випадків використання.

Форматрозширенняімпортекспортматеріальна підтримкаІєрархія сцени
OBJ.objТакТакФайли МТЛ (MtL files)Платний
STL.stlТакТакНіхтоПлатний
ГТФ 2.0.gltfТакТакPBRПовний
GLB.glbТакТакPBRПовний
FBX.fbxТакНеБагатийПовний

OBJ, STL, GLTF і GLB підтримують як імпорт, так і експорт. Імпорт тільки.GLB (бінарний glTF) виробляється за допомогою GltfSaveOptions з setContentType(FileContentType.BINARY).

Об’єкт Wavefront Object

OBJ є одним з найбільш широко підтримуваних форматів 3D-меші. він зберігає геометрію як плоський текст, з опціональним .mtl Додатки для товариства з матеріалів.

Завантажити OBJ файли

Найпростіший спосіб – пройти шлях файлу безпосередньо:

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

Для більш контролю, використання ObjLoadOptions:

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

Якщо файл OBJ відноситься до файлу MTL (через mtllib Бібліотека буде намагатися автоматично завантажувати матеріальні визначення з неї. файл МТЛ повинен бути в тому ж каталозі, що і файл ОБД або на шляху, зазначеному в директиві.

Заробіток як OBJ

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

БГ використовує випадки

  • Обмін даними меша між різними 3D-інструментами.
  • Імпорт моделей з бібліотеки активів, які розповсюджуються у форматі OBJ.
  • Швидка інспекція геометрії без складних ієрархій сцен.

Стереолітографія - Stereolithography

STL - стандартний формат для 3D-принту. він представляє сурову трикутну геометрію без матеріалів, кольорів або іерархії сцен. файли ST L походять в двох варіантах: 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 пише тільки перші 3 вертикали кожної полігони; квадратні і н-гонні обличчя тихо закручуються. ASCII ST L записує всі вертексні показники на обличчі, виробляючи зловмисний вихід для нетриангних обличччя. завжди використовуйте передтроульовані меші (всі трикутники) при експорті до STl.
  • Бінарний STL значно менший, ніж ASCII STl для великих моделей.
  • STL - це формат вибору, коли ціль 3D-принтер або програмне забезпечення для слайзера.

GLTF: формат передачі

GLTF - сучасний формат, розроблений для ефективного передачі та завантаження 3D-контенту, особливо в Інтернеті і в реалістичних додатках. він підтримує 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 Маленький розмір файлу в виробництві.

ГЛТФ використовує випадки

  • 3D-переглядачі на веб-базі (three.js, Babylon.js).
  • Реальний час і гральні системи.
  • Збереження матеріальних визначеннях ПБР по інструментам.

FBX: Filmbox (ввезення тільки)

FBX - це власний формат Autodesk, який широко використовується в розробці ігор та цифровому контенту. Aspose.3D FOSS для Java підтримує FBx для Імпорт тільки - експорт до FBX не доступний.

Бінарний FBX тільки. FBX імпортер читає тільки бінарні файли FB X. Проходячи через ASCII файл FBx кидається ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Ієрархія нод і витяг матеріалів з FBX не повністю перевірені; складні сцени FB X можуть не бути повним завантаженням.

Завантажити файли FBX

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

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

Конвертувати FBX в інші формати

Оскільки експорт FBX не підтримується, конвертуйте імпортні сцені FB X на 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) і конвертація в інші формати.
  • Завантаження бінарної геометрії FBX і переекспорт до GLTF/GLB, OBJ або STL.

Бач конверсії

Загальний робочий потік - це конвертація цілого каталогу файлів з одного формату в інший. ось шаблон для конфігурації комплекту:

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/AУ НБУ немає матеріальної підтримки
OBJГЛТФ / ГРБзбереженоПеретворення в PBRПлатнийМТЛ-матеріали, маперовані там, де це можливо
STLOBJзбереженоНіхтоN/AНемає матеріалів в джерелі
STLГЛТФ / ГРБзбереженодефолтПлатнийВикористання дефектних матеріалів
ГЛТФOBJзбереженоспрощенеФлатентПБР до базового матеріалу
ГЛТФSTLзбереженовтраченийФлатентГеометрія тільки
FBXOBJзбереженоспрощенеФлатентматеріальна спрощення
FBXSTLзбереженовтраченийФлатентГеометрія тільки
FBXГЛТФ / ГРБзбереженоПеретворення в PBRзбереженоДобро вірність

Загальні напрямки конверсії

  • Геометрія Зазвичай зберігається між форматними парами, з одним важливим винятком: при експорті до STL меші повинні складатися повністю з тріумфальних обличчя. бінарний ST L тихо тримає квадратні і н-гони обличчя до перших 3 вертикалів; ASCII STl виробляє деформаційний результат для нетрикутних обличків.
  • Матеріали Найкраще вижити між glTF і FBX імпортуваними сценами, які включають матеріальні дані. Конвертація в STL завжди кидає матеріали. конвертирування в OBJ спрощує матеріалів до базового моделі MTL.
  • Ієрархія сцени Збережений між форматами файлів GLTF. OBJ і STL виробляють площі структури. Ієрархія FBX та екстракція матеріалів не повністю перевірені в цій версії.

Покласти все разом

Ось повний приклад, який завантажує файл 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 для Java дає вам постійний API в кількох форматах.:

  • OBJ - простой обмін мечами з базовими матеріалами.
  • STL - геометричний формат тільки для 3D-принтерних трубопроводів.
  • ГЛТФ / GLB - сучасний формат, доступний для веб- і реального часу. GltfSaveOptions з setContentType(FileContentType.BINARY) Продукція GLB.
  • FBX - імпорт тільки; багатий формат для завантаження активів з ігрових двигунів та інструментів DCC.

Використовуйте формат-специфічне завантаження і зберегти класи варіантів (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) коли потрібен тонкий контроль над імпорту або експорту.

Для отримання додаткових деталей, відвідайте 3D документація або перейдіть до джерела GitHub.