We zijn verheugd de beschikbaarheid aan te kondigen van Aspose.3D FOSS for Java – een gratis, open-source bibliotheek voor het werken met 3D-bestandsformaten in Java-toepassingen. Gebouwd als een pure Java-oplossing zonder native afhankelijkheden, draait de bibliotheek op Java 21 en later, waardoor hij toegankelijk is voor een breed scala aan projecten en omgevingen.

Deze post behandelt wat de bibliotheek biedt, hoe je kunt beginnen en waar je hierna heen kunt gaan.

Wat is Aspose.3D FOSS voor Java?

Aspose.3D FOSS for Java is een lichtgewicht 3D-bestandsverwerkingsbibliotheek gepubliceerd onder de MIT license. Het biedt een scene-graph API die je in staat stelt 3D-modellen te laden, inspecteren, transformeren en op te slaan in verschillende veelgebruikte formaten. De bibliotheek is volledig geschreven in Java en vereist geen externe native binaries of platformspecifieke configuraties.

De broncode is beschikbaar op GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Belangrijkste hoogtepunten

  • Puur Java – geen JNI, geen native bibliotheken, geen platformbeperkingen.
  • Java 21+ compatibel.
  • MIT-licentie – gebruik het in persoonlijke, commerciële of propriëtaire projecten zonder beperkingen.
  • Scene-graph-architectuur – een bekende boom van knooppunten, meshes, camera’s en materialen.
  • Multi-formatondersteuning – lezen en schrijven OBJ, STL, glTF 2.0, en GLB-bestanden; FBX-bestanden lezen.

Snelstart

Maven-installatie

Voeg de volgende afhankelijkheid toe aan uw pom.xml:

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

Uw eerste conversie

Het eenvoudigste gebruiksscenario is het laden van een 3D‑bestand in één formaat en het opslaan in een ander. Hier is een conversie in twee regels van OBJ naar 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");
    }
}

De Scene class is het centrale toegangspunt. Roep Scene.fromFile() met een bestandspad om een model te laden, roep dan save() met het doelpad. De bibliotheek leidt het formaat af van de bestandsextensie.

Een Scene vanaf nul bouwen

U kunt ook scenes programmatisch opbouwen:

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

Dit maakt een nieuwe scene, voegt een kindknooppunt met de naam “Box” toe onder de root, plaatst het op de coördinaten (1, 2, 3) en exporteert het resultaat als een glTF‑bestand.

Laden met formatspecifieke opties

Wanneer je fijnere controle over het laadproces nodig hebt, biedt elk formaat een toegewijde optieklasse. Bijvoorbeeld, het laden van een STL‑bestand met expliciete opties:

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

De Scene.fromFile() statische methode accepteert elk van de laadoptietypen: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, of FbxLoadOptions.

Doorlopen van de scene‑graph

Zodra een scene is geladen, kun je de knoopboom doorlopen om de inhoud te inspecteren of te wijzigen:

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

Dit patroon is nuttig voor debugging, het genereren van rapporten over de modelinhoud, of het selectief aanpassen van delen van een scene vóór het opnieuw exporteren.

Transformaties toepassen

Het positioneren van knooppunten in 3D-ruimte gebeurt via de Transform object op elke 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");
    }
}

Transformaties volgen het standaard parent-child erfmodel: de world-space positie van een kind is de combinatie van zijn lokale transformatie en alle vooroudertransformaties tot aan de root.

Wat is inbegrepen

De bibliotheek wordt geleverd met een gerichte set mogelijkheden die zijn ontworpen rond het 3D scene-graph model.

Scene Graph

De scene graph is de ruggengraat van de API. Elk 3D‑bestand wordt weergegeven als een boomstructuur:

KlasseRol
SceneTop-level container; de wortel van de scènegrafiek
NodeEen benoemde positie in de boom; bevat transformaties en kindknooppunten
EntityAbstracte basis voor visuele objecten die aan knooppunten zijn gekoppeld
MeshPolygonale geometrie – vertices, faces, normals
CameraDefinitie van virtuele camera
TransformLokale translatie, rotatie en schaal voor een knooppunt
GlobalTransformBerekende wereldruimte-transformatie

Materialen

De bibliotheek biedt een PBR (Physically Based Rendering) materiaalmodel:

  • PbrMaterial – fysiek gebaseerd rendermateriaal met albedo, metalness, roughness, emissieve kleur en transparantie. Dit is de enige concrete materiaalklasse die beschikbaar is in de Java editie.

Wiskundige hulpprogramma’s

De com.aspose.threed pakket bevat essentiële wiskundige primitieve:

  • Vector3 – 3-component vector voor posities, richtingen en kleuren.
  • Matrix4 – 4x4 transformatie-matrix.
  • Quaternion – rotatie-representatie.
  • BoundingBox – asgeoriënteerde begrenzingsdoos voor ruimtelijke queries.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Laad- en Opslaanopties

Elk formaat heeft toegewijde optieklassen waarmee u het import- en exportgedrag kunt regelen:

FormaatOpties ladenOpties opslaan
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (alleen import)

Bij voorbeeld, om glTF te exporteren met mooi opgemaakte JSON en een omgekeerd coördinatensysteem:

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

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

Ondersteunde formaten

De volgende tabel geeft een overzicht van de formaten die Aspose.3D FOSS voor Java kan lezen en schrijven.

FormaatExtensieImporterenExporterenNotities
OBJ.objJaJaMet MTL-materialen
STL.stlJaJaBinary + ASCII
glTF 2.0.gltfJaJaJSON format
GLB.glbJaJaBinaire glTF via GltfSaveOptions
FBX.fbxJaNeeAlleen importeren

OBJ, STL, glTF en GLB ondersteunen zowel laden als opslaan. FBX wordt alleen voor import ondersteund.

Gids voor formaatselectie

Het kiezen van het juiste formaat hangt af van uw gebruikssituatie:

  • OBJ is ideaal wanneer je maximale compatibiliteit over 3D-tools nodig hebt. Bijna elke modelleringsapplicatie kan OBJ lezen en schrijven. Het werkt goed voor uitwisseling van mesh-gegevens, maar draagt alleen basismateriaalinformatie via bijbehorende MTL‑bestanden.
  • STL is het formaat bij uitstek voor 3D‑printworkflows. Het slaat ruwe getrianguleerde geometrie op zonder materialen of scène‑hiërarchie, precies wat slicersoftware verwacht. Als je pipeline eindigt bij een 3D‑printer, is STL de eenvoudige keuze.
  • glTF is de moderne standaard voor web- en realtime 3D. Het ondersteunt PBR-materialen, volledige scènehiërarchieën, en is ontworpen voor efficiënte transmissie. Gebruik glTF bij het bouwen van webgebaseerde viewers, werken met three.js of Babylon.js, of bij het richten op elke realtime renderpipeline.
  • FBX is diep geïntegreerd in game-ontwikkeling en workflows voor digitale contentcreatie. Het ondersteunt rijke scenedata, inclusief hiërarchieën en materialen. Aspose.3D FOSS voor Java ondersteunt FBX alleen importeren – gebruik het om FBX-assets te laden en ze naar andere formaten te converteren.

Bekende beperkingen

Het is belangrijk op te merken dat Scene.render() is niet ondersteund in de FOSS-editie. Het aanroepen van deze methode zal een UnsupportedOperationException. De bibliotheek is ontworpen voor bestandsgebaseerde 3D-verwerking – laden, manipuleren, transformeren en opslaan van modellen – in plaats van realtime rendering naar een scherm.

Open source en licenties

Aspose.3D FOSS voor Java is uitgebracht onder de MIT License. Dit betekent dat je vrij bent om:

  • De bibliotheek te gebruiken in commerciële en propriëtaire toepassingen.
  • De broncode aan te passen aan je behoeften.
  • Distribueer de bibliotheek als onderdeel van uw eigen software.

Er zijn geen royaltykosten, geen gebruikslimieten en geen naamsvermeldingseisen, behalve wat de MIT-licentie specificeert.

De volledige broncode wordt gehost op GitHub, en bijdragen zijn welkom: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Systeemvereisten

VereisteDetail
Java versie21 or later
AfhankelijkhedenGeen (zuiver Java)
PlatformenElk platform dat een JVM draait
BuildtoolMaven (aanbevolen)

Aan de slag

Hier zijn de bronnen om u op weg te helpen:

  • Documentatie – uitgebreide gidsen en API‑walkthroughs zijn beschikbaar op de Aspose.3D documentatiesite.
  • Kennisbank – praktische how‑to‑artikelen en probleemoplossingstips in de Aspose.3D KB.
  • API-referentie – gedetailleerde klasse‑ en methodereferentie op de Aspose.3D API-referentie.
  • Broncode – blader en draag bij op GitHub.
  • Maven Central – het pakket wordt gepubliceerd als com.aspose:aspose-3d-foss op Maven Central.

Veelvoorkomende gebruikssituaties

Hier zijn enkele praktische scenario’s waarin Aspose.3D FOSS voor Java goed past:

Formaatconversiepijplijnen

Veel teams ontvangen 3D‑assets in één formaat, maar hebben ze in een ander nodig. Een ontwerpteam werkt mogelijk met FBX, terwijl het webteam glTF nodig heeft. De bibliotheek stelt je in staat geautomatiseerde conversiepijplijnen te bouwen:

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

Voordat u een 3D‑asset in uw applicatie integreert, wilt u mogelijk de inhoud valideren – het controleren van het aantal knooppunten, het verifiëren van de geometrie, of bevestigen dat verwachte elementen aanwezig zijn:

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

Scène‑assemblage

U kunt meerdere modellen laden en ze combineren tot één enkele scène:

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

Wat volgt

In komende berichten behandelen we:

  • Een diepgaande duik in de belangrijkste functies van de scene-graph API, materialen en wiskundige hulpprogramma’s.
  • Een praktische gids voor het werken met elk ondersteund 3D‑formaat – OBJ, STL, glTF en FBX – inclusief laad-/opslaoptopties en batch‑conversiepatronen.

Blijf op de hoogte, en voel u vrij om de bibliotheek te verkennen en uw feedback te delen op GitHub.