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

Изтегляне и съхранение на опции

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

Форматътопции за зарежданеСпасяване на опции
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 инструменти. Почти всяко приложение за моделиране може да чете и пише 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.