С радост обявяваме наличието на 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, без native библиотеки, без ограничения за платформи.
- 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");
}
}
Това 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 | Именувана позиция в дървото; съдържа трансформации и дъщерни възли |
Entity | Абстрактна база за визуални обекти, прикрепени към възли |
Mesh | Полигонална геометрия – върхове, лица, нормали |
Camera | Дефиниция на виртуална камера |
Transform | Локална транслация, ротация и мащаб за възел |
GlobalTransform | Изчислена трансформация в световното пространство |
Материали
Библиотеката предоставя PBR (Physically Based Rendering) материален модел:
- PbrMaterial – материал за физически базирано рендериране с албедо, металност, грубост, емисивен цвят и прозрачност. Това е единственият конкретен клас материал, наличен в изданието Java.
Математически инструменти
Това 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 за Java може да чете и записва.
| Формат | Разширение | Импорт | Експорт | Бележки |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | С MTL материали |
| STL | .stl | Да | Да | Бинарен + ASCII |
| glTF 2.0 | .gltf | Да | Да | JSON формат |
| GLB | .glb | Да | Да | Binary 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 за Java е публикуван под MIT лиценз. Това означава, че сте свободни да:
- Използвате библиотеката в комерсиални и собственически приложения.
- Модифицирате изходния код, за да отговаря на вашите нужди.
- Разпространявайте библиотеката като част от вашия собствен софтуер.
Няма такси за роялти, няма ограничения за използване и няма изисквания за атрибуция, освен тези, които предвижда лицензът MIT.
Пълният изходен код е хостван в GitHub и приносите са добре дошли: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Системни изисквания
| Изискване | Подробности |
|---|---|
| Java версия | 21 or later |
| Зависимости | Няма (чист Java) |
| Платформи | Всяка платформа, която изпълнява JVM |
| Инструмент за изграждане | Maven (препоръчително) |
Първи стъпки
Ето ресурсите, които ще ви помогнат да започнете работа:
- Документация – обширни ръководства и API walkthroughs са налични на Aspose.3D документационен сайт.
- База от знания – практични статии с инструкции и съвети за отстраняване на проблеми в the 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.