Aspose.3D FOSS voor Java ondersteunt vijf 3D-bestandsformaten: OBJ, STL, glTF, GLB, en FBX (alleen import).

Alle voorbeelden gebruiken de com.aspose.threed.* pakket:

import com.aspose.threed.*;

Maven‑afhankelijkheid:

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

Formaatlandschap

Voordat we beginnen, hier is een kort overzicht van de vier ondersteunde formaten en hun typische gebruikssituaties.

FormaatExtensieImporterenExporterenMateriaalondersteuningScènehiërarchie
OBJ.objJaJaBasis (MTL-bestanden)Vlak
STL.stlJaJaGeenVlak
glTF 2.0.gltfJaJaPBRVolledig
GLB.glbJaJaPBRVolledig
FBX.fbxJaNeeRijkVolledig

OBJ, STL, glTF en GLB ondersteunen zowel import als export. FBX wordt ondersteund voor alleen import. GLB (binaire glTF) wordt geproduceerd via GltfSaveOptions met setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ is een van de meest breed ondersteunde 3D-meshformaten. Het slaat geometrie op als platte tekst, met een optionele .mtl bijbehorend bestand voor materialen.

OBJ-bestanden laden

De eenvoudigste aanpak is om het bestandspad direct door te geven:

Scene scene = Scene.fromFile("model.obj");

Voor meer controle, gebruik ObjLoadOptions:

ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);

Wanneer het OBJ‑bestand een MTL‑bestand (via een mtllib directive), zal de bibliotheek proberen de materiaaldefinities automatisch te laden. Het MTL‑bestand moet zich in dezelfde map bevinden als het OBJ‑bestand of op het pad dat in de directive is opgegeven.

Opslaan als OBJ

Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");

OBJ-toepassingen

  • Mesh-gegevens uitwisselen tussen verschillende 3D-tools.
  • Modellen importeren uit assetbibliotheken die in OBJ-formaat distribueren.
  • Snelle inspectie van geometrie zonder complexe scènehiërarchieën.

STL: Stereolithografie

STL is het standaardformaat voor 3D-printen. Het vertegenwoordigt ruwe getrianguleerde geometrie zonder materialen, kleuren of scènehiërarchie. STL-bestanden zijn er in twee varianten: ASCII (menselijk leesbaar) en binair (compact).

STL-bestanden laden

// Simple load
Scene scene = Scene.fromFile("part.stl");

// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);

Opslaan als STL

Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");

Om de uitvoer te controleren, gebruik StlSaveOptions:

StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);

STL-overwegingen

  • STL-bestanden bevatten alleen getrianguleerde geometrie. Materialen, texturen en de scènehiërarchie gaan verloren bij het exporteren.
  • Binaire STL is aanzienlijk kleiner dan ASCII STL voor grote modellen.
  • STL is het voorkeursformaat wanneer het doel een 3D-printer of slicer‑software is.

glTF: GL Transmission Format

glTF is een modern formaat dat is ontworpen voor efficiënte transmissie en het laden van 3D‑content, met name op het web en in realtime‑toepassingen. Het ondersteunt PBR‑materialen, scènehiërarchieën en animaties.

glTF-bestanden laden

Scene scene = Scene.fromFile("scene.gltf");

// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);

Opslaan als glTF

De basisopslag gebruikt de bestandsextensie om het formaat te bepalen:

scene.save("output.gltf");

Voor gedetailleerde controle, gebruik GltfSaveOptions:

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

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

Details van GltfSaveOptions

MethodeDoel
setFlipCoordinateSystem(boolean)Draai de as van het coördinatensysteem om tijdens export. Handig bij het converteren van Y-up naar Z-up of omgekeerd.
setPrettyPrint(boolean)Formatteer de output JSON met inspringing voor leesbaarheid. Stel in op false voor een kleinere bestandsgrootte in productie.

glTF-toepassingen

  • Webgebaseerde 3D-viewers (three.js, Babylon.js).
  • Realtime-toepassingen en game-engines.
  • Behoud van PBR-materiaaldefinities tussen tools.

FBX: Filmbox (Alleen import)

FBX is een propriëtair formaat van Autodesk dat veel wordt gebruikt in game‑ontwikkeling en digitale contentcreatie. Het ondersteunt rijke scène‑hiërarchieën, materialen en animaties. Aspose.3D FOSS voor Java ondersteunt FBX voor alleen importeren – exporteren naar FBX is niet beschikbaar.

FBX‑bestanden laden

Scene scene = Scene.fromFile("character.fbx");

// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);

FBX converteren naar andere formaten

Aangezien export van FBX niet wordt ondersteund, converteer geïmporteerde FBX‑scènes naar glTF, GLB, OBJ of STL:

Scene scene = Scene.fromFile("character.fbx");

// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);

FBX-gebruikssituaties

  • Assets importeren vanuit Autodesk‑tools (Maya, 3ds Max) en converteren naar andere formaten.
  • Rigged personages en geanimeerde scènes laden voor herexport naar glTF/GLB.

Batchconversie

Een veelvoorkomende workflow is het converteren van een volledige map met bestanden van het ene formaat naar het andere. Hier is een patroon voor batchconversie:

import com.aspose.threed.*;
import java.io.File;

public class BatchConvert {
    public static void main(String[] args) throws Exception {
        File inputDir = new File("models/obj");
        File outputDir = new File("models/gltf");
        outputDir.mkdirs();

        GltfSaveOptions saveOpts = new GltfSaveOptions();
        saveOpts.setPrettyPrint(true);

        File[] objFiles = inputDir.listFiles(
            (dir, name) -> name.toLowerCase().endsWith(".obj")
        );

        if (objFiles == null) return;

        for (File objFile : objFiles) {
            String baseName = objFile.getName()
                .replaceFirst("\\.obj$", "");

            Scene scene = Scene.fromFile(objFile.getAbsolutePath());
            String outPath = new File(outputDir, baseName + ".gltf")
                .getAbsolutePath();

            scene.save(outPath, saveOpts);
            System.out.println("Converted: " + objFile.getName()
                + " -> " + baseName + ".gltf");
        }
    }
}

Dit laadt elke .obj bestand in een map, converteert elk naar glTF met mooi opgemaakte output, en slaat de resultaten op. Je kunt dit patroon aanpassen voor elke bron- en doelformaatcombinatie.

Cross-Formaat Conversiereferentie

De volgende tabel toont wat je kunt verwachten bij het converteren tussen formaten.

VanNaarGeometrieMaterialenHiërarchieNotities
OBJSTLBehoudenVerlorenN/ASTL heeft geen materiaalondersteuning
OBJglTF/GLBBehoudenGeconverteerd naar PBRVlakMTL-materialen waar mogelijk gemapt
STLOBJBehoudenGeenN/AGeen materialen in de bron
STLglTF/GLBBehoudenStandaardPlatStandaardmateriaal toegepast
glTFOBJBehoudenVereenvoudigdVlakPBR naar basismateriaal
glTFSTLBehoudenVerlorenAfgevlaktAlleen geometrie
FBXOBJBehoudenVereenvoudigdAfgevlaktMateriaalversimpeling
FBXSTLBehoudenVerlorenVlak gemaaktAlleen geometrie
FBXglTF/GLBBehoudenOmgezet naar PBRBehoudenGoede getrouwheid

Algemene Conversierichtlijnen

  • Geometrie wordt altijd behouden over alle formaatparen.
  • Materialen presteert het best tussen glTF en FBX, die beide rijke materiaalmodellen ondersteunen. Converteren naar STL verwijdert altijd materialen. Converteren naar OBJ vereenvoudigt materialen tot het basismodel MTL.
  • Scènehiërarchie wordt behouden tussen glTF en FBX. OBJ en STL produceren platte structuren.

Alles bij elkaar brengen

Hier is een volledig voorbeeld dat een OBJ‑bestand laadt, de knooppunten inspecteert en exporteert naar zowel glTF als GLB:

import com.aspose.threed.*;

public class FormatWorkflow {
    public static void main(String[] args) throws Exception {
        // Load
        Scene scene = Scene.fromFile("input.obj");

        // Inspect
        System.out.println("Nodes in scene:");
        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("  " + child.getName());
            Transform t = child.getTransform();
            System.out.println("    Translation: "
                + t.getTranslation());
        }

        // Export to glTF with options
        GltfSaveOptions gltfOpts = new GltfSaveOptions();
        gltfOpts.setPrettyPrint(true);
        scene.save("output.gltf", gltfOpts);

        // Export to GLB (binary glTF)
        GltfSaveOptions glbOpts = new GltfSaveOptions();
        glbOpts.setContentType(FileContentType.BINARY);
        scene.save("output.glb", glbOpts);

        System.out.println("Export complete.");
    }
}

Samenvatting

Aspose.3D FOSS voor Java biedt je een consistente API over meerdere formaten. De belangrijkste punten:

  • OBJ – eenvoudige mesh‑uitwisseling met basismaterialen.
  • STL – alleen‑geometrieformaat voor 3D‑printpijplijnen.
  • glTF / GLB – modern PBR‑geschikt formaat voor web‑ en realtimegebruik. Gebruik GltfSaveOptions met setContentType(FileContentType.BINARY) voor GLB-uitvoer.
  • FBX – alleen importeren; rijk formaat voor het laden van assets vanuit game-engines en DCC-tools.

Gebruik format-specifieke laad- en opslaanoptieklassen (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) wanneer je fijnmazige controle nodig hebt over het import- of exportproces.

Voor meer details, bezoek de Aspose.3D documentatie of bekijk de bron op GitHub.