Мы рады сообщить о наличии Aspose.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, нет коренных библиотек, никаких ограничений на платформу.
  • Java 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.

Математические Utilities

В том, что 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-инструментами. Почти каждая модельная программа может читать и писать ОБД. Хорошо работает для обмена данными меша, но носит только базовую материальную информацию через сопутствующие MTL файлы.
  • STL Это формат выбора для 3D-принтерных рабочих потоков. Он хранит сырую триъестерическую геометрию без материалов или сценической иерархии, что именно то, чего ожидает программное обеспечение слайзера. Если ваша трубопроводная линия заканчивается на 3Д-печатателе, STL является простой выбор.
  • ГЛТФ Это современный стандарт для веб и 3D в реальном времени. Он поддерживает PBR материалы, полные сценические иерархии, и предназначен для эффективной передачи. Используйте glTF при строительстве на базе веб-видетелей, работая с three.js или Babylon.JS, или целенаправленная любая рендеринговая труба в режиме реального времени .
  • FBX глубоко интегрирован в разработку игр и цифровые потоки работы по созданию контента. он поддерживает богатые данные сцены, включая гиерархии и материалы. Aspose.3D FOSS для Java поддерживает FBX Импорт только — используйте его для загрузки активов FBX и конвертирования их в другие форматы.

Известные ограничения

Важно отметить, что Scene.render() Это Не поддерживается В издании FOSS. называя этот метод будет бросать 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 доступны на Сайт Aspose.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.