Aspose.3D FOSS for Java understøtter fem 3D‑filformater: OBJ, STL, glTF, GLB, og FBX (kun import).

Alle eksempler bruger com.aspose.threed.* pakke:

import com.aspose.threed.*;

Maven‑afhængighed:

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

Formatoversigt

Før du dykker ned, er her en hurtig oversigt over de fire understøttede formater og deres typiske anvendelsestilfælde.

FormatFilendelseImportérEksporterMaterialestøtteScenehierarki
OBJ.objJaJaGrundlæggende (MTL-filer)Flad
STL.stlJaJaIngenFlad
glTF 2.0.gltfJaJaPBRFuld
GLB.glbJaJaPBRFuld
FBX.fbxJaNejRigFuld

OBJ, STL, glTF og GLB understøtter både import og eksport. FBX understøttes til kun import. GLB (binær glTF) genereres via GltfSaveOptions med setContentType(FileContentType.BINARY).

OBJ: Wavefront-objekt

OBJ er et af de mest udbredte 3D-mesh-formater. Det gemmer geometri som almindelig tekst, med en valgfri .mtl medfølgende fil til materialer.

Indlæsning af OBJ-filer

Den enkleste tilgang er at videregive filstien direkte:

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

For mere kontrol, brug ObjLoadOptions:

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

Når OBJ-filen refererer til en MTL-fil (via en mtllib direktiv), vil biblioteket forsøge at indlæse materialedefinitioner fra den automatisk. MTL-filen skal være i samme mappe som OBJ-filen eller på den sti, der er angivet i direktivet.

Gem som OBJ

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

OBJ-anvendelsestilfælde

  • Udveksling af mesh-data mellem forskellige 3D-værktøjer.
  • Import af modeller fra asset-biblioteker, der distribuerer i OBJ-format.
  • Hurtig inspektion af geometri uden komplekse scenehierarkier.

STL: Stereolitografi

STL er det standardformat for 3D-print. Det repræsenterer rå trianguleret geometri uden materialer, farver eller scenehierarki. STL-filer findes i to varianter: ASCII (menneskelæselig) og binær (kompakt).

Indlæsning af STL-filer

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

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

Gem som STL

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

For at kontrollere outputtet, brug StlSaveOptions:

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

STL-overvejelser

  • STL-filer indeholder kun trianguleret geometri. Materialer, teksturer og scenehierarki går tabt under eksport.
  • Binær STL er betydeligt mindre end ASCII STL for store modeller.
  • STL er det foretrukne format, når målet er en 3D-printer eller slicer‑software.

glTF: GL Transmission Format

glTF er et moderne format designet til effektiv transmission og indlæsning af 3D-indhold, især på nettet og i realtidsapplikationer. Det understøtter PBR-materialer, scenehierarkier og animationer.

Indlæser glTF-filer

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

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

Gemmer som glTF

Den grundlæggende gemning bruger filendelsen til at bestemme formatet:

scene.save("output.gltf");

For detaljeret kontrol, brug GltfSaveOptions:

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

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

GltfSaveOptions-detaljer

MetodeFormål
setFlipCoordinateSystem(boolean)Vend koordinatsystemets akse under eksport. Nyttigt ved konvertering fra Y-op til Z-op eller omvendt.
setPrettyPrint(boolean)Formater output-JSON’en med indrykning for læsbarhed. Indstil til false for mindre filstørrelse i produktion.

glTF-anvendelsestilfælde

  • Webbaserede 3D-fremvisere (three.js, Babylon.js).
  • Real-time-applikationer og spilmotorer.
  • Bevare PBR-materialdefinitioner på tværs af værktøjer.

FBX: Filmbox (Kun import)

FBX er et proprietært format fra Autodesk, som er udbredt i spiludvikling og digital indholdsoprettelse. Det understøtter rige scenehierarkier, materialer og animationer. Aspose.3D FOSS for Java understøtter FBX for kun import – eksport til FBX er ikke tilgængelig.

Indlæsning af FBX-filer

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

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

Konvertering af FBX til andre formater

Da FBX-eksport ikke understøttes, skal du konvertere importerede FBX-scener til glTF, GLB, OBJ eller STL:

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

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

FBX-anvendelsestilfælde

  • Import af aktiver fra Autodesk-værktøjer (Maya, 3ds Max) og konvertering til andre formater.
  • Indlæser riggede karakterer og animerede scener til geneksport til glTF/GLB.

Batchkonvertering

En almindelig arbejdsgang er at konvertere en hel mappe med filer fra ét format til et andet. Her er et mønster for batchkonvertering:

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

Dette indlæser hver .obj fil i en mappe, konverterer hver til glTF med pænt formateret output, og gemmer resultaterne. Du kan tilpasse dette mønster til enhver kilde- og målformatkombination.

Reference til tværformatkonvertering

Følgende tabel viser, hvad du kan forvente, når du konverterer mellem formater.

FraTilGeometriMaterialerHierarkiNoter
OBJSTLBevarteTabtN/ASTL har ingen materialestøtte
OBJglTF/GLBUændretKonverteret til PBRFladMTL-materialer kortlagt hvor det er muligt
STLOBJUændretIngenN/AIngen materialer i kilden
STLglTF/GLBBevarteStandardFladStandardmateriale anvendt
glTFOBJBevarteForenkletFladetPBR til grundmateriale
glTFSTLBevaretTabtFladetKun geometri
FBXOBJBevaretForenkletFladetMaterialforenkling
FBXSTLBevaretTabtFladetKun geometri
FBXglTF/GLBBevaretKonverteret til PBRBevaretGod nøjagtighed

Generelle konverteringsretningslinjer

  • Geometri bevares altid på tværs af alle formatpar.
  • Materialer overlever bedst mellem glTF og FBX, som begge understøtter rige materialemodeller. Konvertering til STL fjerner altid materialer. Konvertering til OBJ forenkler materialer til den grundlæggende MTL-model.
  • Sceneshierarki bevares mellem glTF og FBX. OBJ og STL producerer flade strukturer.

Sammenlægning af det hele

Her er et komplet eksempel, der indlæser en OBJ-fil, inspicerer dens noder og eksporterer til både glTF og 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.");
    }
}

Opsummering

Aspose.3D FOSS for Java giver dig et konsistent API på tværs af flere formater. Nøglepunkterne:

  • OBJ – simpel mesh-udveksling med grundlæggende materialer.
  • STL – kun-geometri format til 3D-print pipelines.
  • glTF / GLB – moderne PBR-kompatibelt format til web- og realtidsbrug. Brug GltfSaveOptions med setContentType(FileContentType.BINARY) til GLB-output.
  • FBX – kun import; rigt format til indlæsning af assets fra spilmotorer og DCC-værktøjer.

Brug format‑specifikke indlæsnings‑ og gemme‑indstillingsklasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) når du har brug for finjusteret kontrol over import‑ eller eksportprocessen.

For flere detaljer, besøg Aspose.3D dokumentation eller gennemse kilden på GitHub.