Ми з нетерпінням чекаємо на доступність 3D FOSS для Java - безкоштовна, відкрита бібліотека для роботи з форматами файлів 3D в Java додатках. побудована як чисте Java рішення без корінних залежності, бібліотека працює на Java 21 і пізніше, що робить її доступною для широкого спектру проектів і середовищ.

Цей пост проходить через те, що бібліотека пропонує, як почати і куди піти звідси.

Що таке 3D FOSS для Java?

Aspose.3D FOSS для Java - це легка бібліотека обробки файлів 3D, опублікована під Ліцензія.Він забезпечує API-сцені, що дозволяє завантажувати, інспекціювати, трансформувати і зберігати 3D-моделі в кількох широко використовуваних форматах. Бібліотека повністю написана в Java і не вимагає зовнішніх корінних бінарних або платформово-специфічних конфігурацій.

Джерело коду доступно на GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Ключові підсилки

  • Чиста Java — немає JNI, ні корінних бібліотек, ніяких платформ обмежень.
  • Ява 21+ і компактних.
  • Міт ліцензований - використовувати його в особистих, комерційних або власних проектах без обмежень.
  • Сцена-граф архітектури - знайоме дерево вузлів, мечетей, камер і матеріалів.
  • Мултиформатна підтримка - читати і писати OBJ, STL, GLTF 2.0 та GLB файли; читання FBX файлів.

Швидкий старт

Мавзона установка

Додайте наступну залежність до вашого pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.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 Університет є центральною точкою вступу. Scene.fromFile() з файловою дорогою для завантаження моделі, а потім викликати save() Бібліотека вводить формат з розширення файлу.

Створення сцені з Scratch

Також можна програмувати сцену:

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

Це створює нову сцену, додає дитячий ящик під корінням під назвою «Карта», позиціонує його в координатах (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());
            }
        }
    }
}

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

Використання трансформацій

Позиціонування вузлів у 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 (Фізично заснований рендеринг):

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

Математичні інструменти

І те com.aspose.threed У пакеті входять основні математичні примітиви:

  • Вектор 3 3-компонентний вектор для позицій, напрямків і кольорів.
  • Матрика 4 4x4 трансформаційна матриця.
  • Кватерніон Ротаційна представництво .
  • 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
ГЛТФ / 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ТакТакЗ використанням МТЛ матеріалів
STL.stlТакТакБінарний + ASCII
ГТФ 2.0.gltfТакТакФормат JSON
GLB.glbТакТакБінарний GlTF через GltfSaveOptions
FBX.fbxТакНеІмпорт тільки

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

Формат вибірка

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

  • OBJ Ідеальний, коли вам потрібна максимальна сумісність між 3D-інструментами. майже кожна модельюча програма може читати і писати OBJ. Він добре працює для обміну даними меша, але несе тільки основну матеріальну інформацію через товаришів файли MTL.
  • STL Він зберігає сурову трикутну геометрию без матеріалів або іерархії сцен, що саме те, чого очікує програмне забезпечення для злиття. Якщо ваша трубопровід закінчується на 3D-принтері, STL є простим вибором.
  • ГЛТФ Він підтримує PBR матеріали, повну сцену і є розроблений для ефективного передачі. Використовуйте glTF при побудові веб-базируючих переглядачів, працюючи з three.js або Babylon.JS, або спрямовані на будь-який реального часу rendering трубопровід.
  • FBX Він глибоко інтегрується в розробку ігор та цифрові контент-творювання робочих потоків. він підтримує багаті дані сцен, включаючи йерархії та матеріали. Aspose.3D FOSS для Java підтримає FBX Імпорт тільки Використовуйте його для завантаження активів FBX і конвертації їх в інші формати.

Знайомі обмеження

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

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

Aspose.3D FOSS для Java випускається під Ліцензія міт.Це означає, що ви вільні:

  • Використовуйте бібліотеку в комерційних та власних додатках.
  • Змінюйте код джерела, щоб відповідати вашим потребам.
  • Розповсюджуйте бібліотеку як частину власного програмного забезпечення.

Немає ні довільних зборів, ні обмежень використання і ніяких вимог до присвоєння за межами того, що зазначено в ліцензії MIT.

Повний код джерела хостирується на GitHub, а внески вітаються: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Системні вимоги

ВимогиДеталі
Java версія21 or later
ЗалежністьНіякий (чистий Java)
Платформибудь-яка платформа, яка працює JVM
Будівництво інструментівМавзона (загальна кількість рекомендованих)

Починати з

Ось основні способи, які допоможуть вам піднятися і працювати:

  • Документація - всеосяжні маршрути і прогулянки API доступні на 3D документальний сайт.
  • База знань - практичні способи до статей та поправки з вирішенням проблем у 3D КБ.
  • Опір відзначення - детальну класифікацію та методику посилання на 3D API Референт.
  • Джерело Кодекс - переглядати і сприяти GitHub.
  • Міно Центральний - пакету опубліковано як org.aspose:aspose-3d-foss:26.5.0 У центрі Мавен.

Унікальні випадки використання

Ось деякі практичні сценарії, де 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.