Örömmel jelentjük be, hogy elérhető Aspose.3D FOSS for Java – egy ingyenes, nyílt forráskódú könyvtár, amely 3D fájlformátumokkal való munkához használható Java alkalmazásokban. Tiszta Java megoldásként épült, natív függőségek nélkül, a könyvtár a Java 21 és újabb verziókon fut, így széles körű projektek és környezetek számára elérhető.

Ez a bejegyzés bemutatja, mit kínál a könyvtár, hogyan kezdjünk hozzá, és merre tovább.

Mi a Aspose.3D FOSS Java?

Aspose.3D FOSS for Java egy könnyűsúlyú 3D fájlfeldolgozó könyvtár, amely a MIT licenc. Olyan jelenetgrafikon API-t biztosít, amely lehetővé teszi 3D modellek betöltését, vizsgálatát, átalakítását és mentését több széles körben használt formátumban. A könyvtár teljes egészében Java nyelven íródott, és nem igényel külső natív bináris fájlokat vagy platformspecifikus konfigurációkat.

A forráskód elérhető a GitHubon: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Főbb kiemelések

  • Tiszta Java – nincs JNI, nincs natív könyvtár, nincs platformkorlátozás.
  • Java 21+ kompatibilis.
  • MIT licensed – használhatod személyes, kereskedelmi vagy saját tulajdonú projektekben korlátozások nélkül.
  • Scene-graph architektúra – egy ismerős fa a csomópontok, hálók, kamerák és anyagokból.
  • Többformátumú támogatás – OBJ, STL, glTF 2.0 és GLB fájlok olvasása és írása; FBX fájlok olvasása.

Gyors kezdés

Maven telepítés

Adja hozzá a következő függőséget a pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Az első konverziód

A legegyszerűbb felhasználási eset egy 3D fájl betöltése az egyik formátumban, majd mentése egy másikba. Íme egy kétsoros konverzió OBJ-ből STL-be:

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");
    }
}

A Scene class a központi belépési pont. Hívja meg Scene.fromFile() egy fájlúttal a modell betöltéséhez, majd hívja meg save() a célúttal. A könyvtár a formátumot a fájl kiterjesztéséből következteti.

Jelenet felépítése a semmiből

Jeleneteket programozottan is felépíthet:

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");
    }
}

Ez létrehoz egy új jelenetet, a gyökér alá hozzáad egy “Box” nevű gyermekcsomópontot, a (1, 2, 3) koordinátákra helyezi, és a végeredményt glTF fájlként exportálja.

Betöltés formátum-specifikus beállításokkal

Amikor finomabb irányításra van szükség a betöltési folyamat során, minden formátum egy dedikált opciós osztályt biztosít. Például egy STL fájl betöltése explicit beállításokkal:

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");
    }
}

A Scene.fromFile() statikus metódus elfogadja a betöltési opció típusok bármelyikét: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, vagy FbxLoadOptions.

A jelenet gráf bejárása

Miután egy jelenet betöltődött, bejárhatja a csomópontfát, hogy megvizsgálja vagy módosítsa annak tartalmát:

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());
            }
        }
    }
}

Ez a minta hasznos hibakereséshez, a modell tartalmáról szóló jelentések készítéséhez, vagy a jelenet egyes részeinek szelektív módosításához az újraexportálás előtt.

Transzformációk alkalmazása

A csomópontok 3D térben történő elhelyezése a Transform objektumon minden 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");
    }
}

Az átalakítások a szabványos szülő-gyermek öröklődési modellnek megfelelően működnek: egy gyermek világkoordináta‑pozíciója a helyi transzformációja és az összes ős transzformációjának kombinációja a gyökérig.

Mi van benne

A könyvtár egy fókuszált képességkészlettel érkezik, amely a 3D scene-graph modell köré épül.

Jelenetgrafikon

A jelenetgrafikon az API gerince. Minden 3D fájl egy fa struktúraként van ábrázolva:

OsztálySzerepkör
SceneLegfelső szintű konténer; a jelenetgrafikon gyökere
NodeA fa egy elnevezett pozíciója; tartalmaz transzformációkat és gyermekcsomópontokat
EntityAbsztrakt alap a csomópontokhoz csatolt vizuális objektumok számára
MeshPoligonális geometria – csúcsok, felületek, normálok
CameraVirtuális kamera definíciója
TransformHelyi eltolás, forgatás és méretezés egy csomóponthoz
GlobalTransformKiszámított világkoordináta-transzformáció

Anyagok

A könyvtár egy PBR (Physically Based Rendering) anyagmodellt biztosít:

  • PbrMaterial – fizikailag alapú renderelés anyag albedóval, fémességgel, durvasággal, emisszív színnel és átlátszósággal. Ez az egyetlen konkrét anyag osztály, amely a Java kiadásban elérhető.

Matematikai segédprogramok

A com.aspose.threed A csomag tartalmazza a lényeges matematikai primitíveket:

  • Vector3 – 3 komponensű vektor pozíciókhoz, irányokhoz és színekhez.
  • Matrix4 – 4x4-es transzformációs mátrix.
  • Quaternion – forgatás reprezentációja.
  • BoundingBox – tengely-alapú határoló doboz térbeli lekérdezésekhez.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Betöltési és mentési beállítások

Minden formátumnak saját opcióosztályai vannak, amelyekkel szabályozhatja az import és export viselkedését:

FormátumBeállítások betöltéseBeállítások mentése
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (csak importálás)

Például a glTF exportálásához szépen formázott JSON-nal és megfordított koordináta-rendszerrel:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

Támogatott formátumok

Az alábbi táblázat összefoglalja azokat a formátumokat, amelyeket a Aspose.3D FOSS a Java számára olvasni és írni tud.

FormátumKiterjesztésImportálásExportálásMegjegyzések
OBJ.objIgenIgenMTL anyagokkal
STL.stlIgenIgenBináris + ASCII
glTF 2.0.gltfIgenIgenJSON formátum
GLB.glbIgenIgenBináris glTF a GltfSaveOptions segítségével
FBX.fbxIgenNemCsak importálás

Az OBJ, STL, glTF és GLB egyaránt támogatja a betöltést és a mentést. Az FBX csak importálásra van támogatva.

Formátumválasztási útmutató

A megfelelő formátum kiválasztása az Ön felhasználási esetétől függ:

  • OBJ ideális, ha maximális kompatibilitásra van szükség a 3D eszközök között. Szinte minden modellező alkalmazás képes olvasni és írni az OBJ-t. Jól működik háló adatcseréhez, de csak alapvető anyaginformációkat hordoz a kísérő MTL fájlokban.
  • STL a 3D nyomtatási munkafolyamatok számára választott formátum. Nyers háromszögelt geometriát tárol anyagok vagy jelenet hierarchia nélkül, ami pontosan azt a formátumot jelenti, amit a szeletelő szoftver elvár. Ha a folyamatod egy 3D nyomtatónál ér véget, az STL a legegyszerűbb választás.
  • glTF a modern szabvány a webes és valós idejű 3D-hez. Támogatja a PBR anyagokat, a teljes jelenet hierarchiákat, és hatékony átvitelre lett tervezve. Használja a glTF-et webalapú nézők építésekor, a three.js vagy a Babylon.js használatakor, vagy bármely valós idejű renderelési csővezeték célzásakor.
  • FBX mélyen integrálódik a játékfejlesztés és a digitális tartalomkészítési munkafolyamatokba. Támogatja a gazdag jelenet adatokat, beleértve a hierarchiákat és anyagokat. Aspose.3D FOSS for Java támogatja az FBX-et. csak importálás – használd FBX eszközök betöltésére és más formátumokra való konvertálásukhoz.

Ismert korlátozások

Fontos megjegyezni, hogy Scene.render() van nem támogatott a FOSS kiadásban. Ennek a metódusnak a meghívása egy UnsupportedOperationException. A könyvtár fájl-alapú 3D feldolgozásra van tervezve – betöltés, manipulálás, átalakítás és modellek mentése – a valós idejű megjelenítés helyett a kijelzőn.

Nyílt forráskód és licencelés

Aspose.3D FOSS for Java a következő licenc alatt kerül kiadásra MIT License. Ez azt jelenti, hogy szabadon tehetsz:

  • Használja a könyvtárat kereskedelmi és tulajdonosi alkalmazásokban.
  • Módosítsa a forráskódot, hogy megfeleljen az igényeinek.
  • Terjeszd a könyvtárat saját szoftvered részeként.

Nincsenek jogdíjak, használati korlátok, és a MIT licenc által előírtakon túl nincs forrásmegjelölési kötelezettség.

A teljes forráskód a GitHubon van tárolva, és a közreműködések szívesen fogadottak: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Rendszerkövetelmények

KövetelményRészlet
Java verzió21 or later
FüggőségekNincs (tiszta Java)
PlatformokBármely platform, amely JVM-et futtat
ÉpítőeszközMaven (ajánlott)

Első lépések

Itt vannak a források, amelyek segítenek elindulni:

  • Dokumentáció – átfogó útmutatók és API áttekintések érhetők el a Aspose.3D dokumentációs oldal.
  • Tudásbázis – gyakorlati útmutató cikkek és hibaelhárítási tippek a Aspose.3D KB.
  • API referencia – részletes osztály- és metódusreferencia a Aspose.3D API-referencia.
  • Forráskód – böngészhet és hozzájárulhat itt GitHub.
  • Maven Central – a csomag közzétéve mint com.aspose:aspose-3d-foss a Maven Centralon.

Gyakori felhasználási esetek

Íme néhány gyakorlati forgatókönyv, ahol a Aspose.3D FOSS a Java számára jól illeszkedik:

Formátumkonverziós csővezetékek

Sok csapat egy formátumban kap 3D eszközöket, de másikra van szükségük. Egy tervezőcsapat dolgozhat FBX-ben, míg a webcsapatnak glTF-re van szüksége. A könyvtár lehetővé teszi automatizált konverziós csővezetékek felépítését:

// 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

Mielőtt egy 3D-eszközt integrálnál az alkalmazásodba, érdemes lehet ellenőrizni a tartalmát – számolni a csomópontok számát, ellenőrizni a geometriát, vagy megerősíteni, hogy a várt elemek jelen vannak:

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");
    }
}

Jelenet összeállítása

Betölthetsz több modellt, és egyetlen jelenetbe kombinálhatod őket:

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");

Mi következik

A következő bejegyzésekben a következőket tárgyaljuk:

  • Mélyreható bemutató a scene-graph API, anyagok és matematikai segédeszközök kulcsfontosságú funkcióiról.
  • Gyakorlati útmutató az egyes támogatott 3D formátumokkal – OBJ, STL, glTF és FBX – való munkához, beleértve a betöltési/mentési lehetőségeket és a kötegelt konverziós mintákat.

Maradj velünk, és nyugodtan fedezd fel a könyvtárat, valamint oszd meg visszajelzésed a GitHubon.