С радост обявяваме наличието на 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)

Опции за зареждане и запазване

Всеки формат разполага със специализирани класове за опции, които ви позволяват да контролирате поведението при импортиране и експортиране:

ФорматЗареди опцииЗапази опции
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / 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ДаДаС 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.