Ми раді оголосити про доступність 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>

Ваше перше перетворення

Найпростіший випадок використання — завантаження 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");
    }
}

The 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");
    }
}

The 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());
            }
        }
    }
}

Цей підхід корисний для налагодження, створення звітів про вміст моделі або вибіркового змінення частин сцени перед повторним експортом.

Застосування трансформацій

Розташування вузлів у 3D‑просторі здійснюється за допомогою 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 (Physically Based Rendering):

  • PbrMaterial — матеріал фізично‑основаного рендерингу з альбедо, металевістю, шорсткістю, емісійним кольором та прозорістю. Це єдиний конкретний клас матеріалу, доступний у випуску Java edition.

Математичні утиліти

The 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)

Параметри завантаження та збереження

Кожен формат має спеціалізовані класи параметрів, які дозволяють керувати поведінкою імпорту та експорту:

ФорматЗавантажити параметриЗберегти параметри
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (тільки імпорт)

Наприклад, щоб експортувати 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ТакТакБінарний glTF через GltfSaveOptions
FBX.fbxТакНіТільки імпорт

OBJ, STL, glTF та GLB підтримують як завантаження, так і збереження. FBX підтримується лише для імпорту.

Посібник з вибору формату

Вибір правильного формату залежить від вашого випадку використання:

  • OBJ є ідеальним, коли потрібна максимальна сумісність між 3D‑інструментами. Майже будь‑яка програма моделювання може читати та записувати OBJ. Він добре підходить для обміну сітковими даними, проте передає лише базову інформацію про матеріали через супутні файли MTL.
  • STL є форматом вибору для робочих процесів 3D‑друку. Він зберігає необроблену трикутну геометрію без матеріалів та ієрархії сцени, що саме те, чого очікує програмне забезпечення для нарізки. Якщо ваш конвеєр закінчується на 3D‑принтері, STL — це простий вибір.
  • glTF є сучасним стандартом для веб‑ та реального‑часового 3D. Підтримує PBR‑матеріали, повні ієрархії сцени та розроблений для ефективної передачі. Використовуйте glTF при створенні веб‑переглядачів, роботі з three.js або Babylon.js, або при орієнтації на будь‑який конвеєр реального‑часового рендерингу.
  • FBX глибоко інтегрований у робочі процеси розробки ігор та створення цифрового контенту. Підтримує багаті дані сцени, включаючи ієрархії та матеріали. Aspose.3D FOSS для Java підтримує FBX тільки імпорт – використовуйте його для завантаження FBX‑активів та конвертації їх у інші формати.

Відомі обмеження

Важливо зазначити, що Scene.render() є не підтримується у версії FOSS. Виклик цього методу викличе UnsupportedOperationException. Бібліотека розроблена для файлової 3D обробки – завантаження, маніпулювання, трансформування та збереження моделей – а не для рендерингу в реальному часі на дисплей.

Відкритий код та ліцензування

Aspose.3D FOSS for 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

Before integrating a 3D asset into your application, you may want to validate its contents – checking node counts, verifying geometry, or confirming that expected elements are present:

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 Assembly

You can load multiple models and combine them into a single scene:

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");

What’s Next

In upcoming posts, we will cover:

  • A deep dive into the key features of the scene-graph API, materials, and math utilities.
  • A practical guide to working with each supported 3D format – OBJ, STL, glTF, and FBX – including load/save options and batch conversion patterns.

Stay tuned, and feel free to explore the library and share your feedback on GitHub.