Ние сме много доволни да обявим наличието на 3D FOSS за Java - свободна, отворена библиотека за работа с 3D файлови формати в Java приложения. Изградена като чисто Java решение без коренни зависимост, библиотеката работи на Java 21 и по-късно, което я прави достъпна до широк спектър от проекти и среди.
Тази статия разглежда какво предлага библиотеката, как да започнете и къде да отидете от тук.
Какво е 3D FOSS за Java?
Aspose.3D FOSS за Java е леко тежка 3D библиотека за обработка на файлове, публикувана под Мит лиценз.Той осигурява API за сцена-графи, която ви позволява да зареждате, инспектирате, трансформирате и съхранявате 3D модели в няколко широко използвани формати. Библиотеката е изцяло написана в Java и не изисква външни местни бинарни или платформи специфични конфигурации.
Източникът е достъпен на GitHub: HTTPS://github.com/аспот-3d-фос/Аспота.3D-FOSS-за Java
Ключови нагласи
- Чиста Java - Няма JNI, няма местни библиотеки, не са ограничени платформите.
- Java 21+ езици Съвместим е.
- Мит лицензиран - да се използва в лични, търговски или собственостни проекти без ограничения.
- Сценаграфска архитектура - познато дърво от възли, меси, камери и материали.
- Мултиформатна поддръжка - четене и писане на 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() с целевия път. библиотеката вмъква формата от разширението на файла.
Изграждане на сцена от 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), и експортира резултата като глтФ файл.
Изтегляне на формат-специфични опции
Когато се нуждаете от по-добра контрол над процеса на зареждане, всеки формат осигурява специален клас опции. например, зарязване на файл 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 издание.
Математически полезни средства
и на 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)
Изтегляне и съхранение на опции
Всеки формат има специални опции класове, които ви позволяват да контролирате вноса и износата поведение:
| Форматът | опции за зареждане | Спасяване на опции |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| ГЛТФ / 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 | Да | Да | С МТЛ материали |
| STL | .stl | Да | Да | Бинарни + ASCII |
| ГЛТФ 2.0 | .gltf | Да | Да | Формат JSON |
| GLB | .glb | Да | Да | Бинарни GlTF чрез GltfSaveOptions |
| FBX | .fbx | Да | Не | Само вносът |
OBJ, STL, glTF и GLB поддържат както зареждане, така и спестяване. FBX се поддържа само за внос.
Формат на избора ръководство
Изборът на правилния формат зависи от случая ви с използване:
- OBJ е идеален, когато се нуждаете от максимална съвместимост между 3D инструменти. Почти всяко приложение за моделиране може да чете и пише OBJ. Той работи добре за обмен на данни в мешавина, но носи само основна материална информация чрез файлове MTL съдружници.
- STL е форматът на избор за 3D печат работни потоци. Съхранява сурова триъгълна геометрия без материали или сцени йерархия, което е точно това, от което се очаква софтуер за слайдър. Ако тръбата ви завърши с 3Д принтер, STL е прост избор.
- ГЛТФ е модерен стандарт за уеб и 3D в реално време. Поддържа 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/аспот-3d-фос/Аспота.3D-FOSS-за Java
Системни изисквания
| изискване | Детайли |
|---|---|
| Java версия | 21 or later |
| зависимост | Не е ява (Pure Java) |
| Платформи | Всяка платформа, която изпълнява JVM |
| Изграждане на инструмент | Мадрид (препоръчва се) |
Започваме
Ето и основните средства, които ще ви помогнат да се изправите и да вървите:
- Документация - всеобхватни ръководства и API ходъри са на разположение в Апсос.3D документация сайт.
- Знание база - практически как да се правят статии и съвети за решаване на проблеми в Апсос 3D KB.
- Огнено референтно - подробно класиране и метод на референция в Апсос 3D API Референт.
- Източник Код - да се прегледа и да допринесе за GitHub.
- Централна мавга - Пакетът е публикуван като
com.aspose:aspose-3d-fossВ центъра на Мавен.
Общи случаи на употреба
Ето някои практически сценарии, където 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.