Мы рады объявить о доступности Aspose.3D FOSS for Java – бесплатная, открытая библиотека для работы с 3D форматами файлов в Java приложениях. Создана как чистое решение Java без нативных зависимостей, библиотека работает на Java 21 и новее, что делает её доступной для широкого спектра проектов и сред.
В этом посте рассматриваются возможности библиотеки, как начать работу и куда двигаться дальше.
Что такое Aspose.3D FOSS для Java?
Aspose.3D FOSS for Java — это легковесная библиотека обработки 3D файлов, опубликованная под MIT license. Она предоставляет API графа сцены, позволяющее загружать, исследовать, преобразовывать и сохранять 3D модели в нескольких широко используемых форматах. Библиотека полностью написана на Java и не требует внешних нативных бинарных файлов или платформо-специфических конфигураций.
Исходный код доступен на GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Ключевые особенности
- Чистый Java – без JNI, без нативных библиотек, без ограничений платформы.
- Java 21+ совместим.
- MIT licensed – используйте его в личных, коммерческих или проприетарных проектах без ограничений.
- Архитектура графа сцены – знакомая иерархия узлов, мешей, камер и материалов.
- Поддержка нескольких форматов – чтение и запись файлов 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");
}
}
Эта 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");
}
}
Эта 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 | Именованная позиция в дереве; содержит transforms и дочерние узлы |
Entity | Абстрактная база для визуальных объектов, привязанных к узлам |
Mesh | Полигональная геометрия — вершины, грани, нормали |
Camera | Определение виртуальной камеры |
Transform | Локальное перемещение, вращение и масштаб узла |
GlobalTransform | Вычисленное преобразование в мировом пространстве |
Материалы
Библиотека предоставляет материалную модель PBR (Physically Based Rendering):
- PbrMaterial – материал physically based rendering с albedo, metalness, roughness, emissive color и transparency. Это единственный конкретный класс материала, доступный в издании Java.
Математические утилиты
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)
Параметры загрузки и сохранения
Каждый формат имеет отдельные классы параметров, позволяющие управлять поведением импорта и экспорта:
| Формат | Загрузить параметры | Сохранить параметры |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (только импорт) |
Например, чтобы экспортировать glTF с красиво отформатированным JSON и инвертированной системой координат:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Поддерживаемые форматы
В следующей таблице суммированы форматы, которые Aspose.3D FOSS for Java может читать и записывать.
| Формат | Расширение | Импорт | Экспорт | Заметки |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | С материалами MTL |
| STL | .stl | Да | Да | Binary + ASCII |
| glTF 2.0 | .gltf | Да | Да | формат JSON |
| GLB | .glb | Да | Да | Binary glTF через GltfSaveOptions |
| FBX | .fbx | Да | Нет | Только импорт |
OBJ, STL, glTF и GLB поддерживают как загрузку, так и сохранение. FBX поддерживается только для импорта.
Руководство по выбору формата
Выбор правильного формата зависит от вашего сценария использования:
- OBJ идеален, когда вам нужна максимальная совместимость между 3D‑инструментами. Практически любое приложение для моделирования может читать и записывать OBJ. Он хорошо подходит для обмена сеточными данными, но передаёт только базовую информацию о материалах через сопутствующие файлы MTL.
- STL STL — формат выбора для рабочих процессов 3D‑печати. Он хранит необработанную триангулированную геометрию без материалов и иерархии сцены, что именно ожидает программное обеспечение слайсера. Если ваш конвейер заканчивается 3D‑принтером, STL — очевидный выбор.
- glTF является современным стандартом для веб‑ и реального времени 3D. Он поддерживает PBR‑материалы, полные иерархии сцены и разработан для эффективной передачи. Используйте glTF при создании веб‑просмотрщиков, работе с three.js или Babylon.js, либо при нацеливании на любой конвейер рендеринга в реальном времени.
- FBX FBX глубоко интегрирован в рабочие процессы разработки игр и создания цифрового контента. Он поддерживает богатые данные сцены, включая иерархии и материалы. Aspose.3D FOSS for Java supports 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
Прежде чем интегрировать 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.