Aspose.3D FOSS for Java understøtter fem 3D-filformater: OBJ, STL, Gldtf, GLB,og FBX Denne post er en praktisk, format-by-format guide, der viser hvordan man lader og gemmer hver enkelt, hvilke muligheder der er tilgængelige, og hvordan at konvertere mellem dem.

Alle eksempler bruger com.aspose.threed.* Pakke af:

import com.aspose.threed.*;

Maven afhængighed:

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

Formater landskab

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

FormateretUdvidelseImportenEksportenMaterialet støtteScenes hierarki
OBJ.objJa jaJa jaBasic (MTL filer)Fladt
STL.stlJa jaJa jaIngen afFladt
GF 2.0.gltfJa jaJa jaPBRFuldt fuldt
GLB.glbJa jaJa jaPBRFuldt fuldt
FBX.fbxJa jaIkkeRigeFuldt fuldt

OBJ, STL, glTF og GLB understøtter både import og eksport. FBX er støttet for Kun import.GLB (binær glTF) er produceret via GltfSaveOptions Med setContentType(FileContentType.BINARY).

OBJ: Wavefront objekt

OBJ er en af de mest støttede 3D-meshformater. Det gemmer geometri som plain tekst, med et valgfrit format .mtl Filer til materialer.

Lader OBJ filer

Den nemmeste metode er at passere filvejen 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 a) mtllib direktiv), biblioteket vil forsøge at oplade materiel definitioner fra det automatisk. MTL-filen skal være i samme katalog som OBJ-fil eller på den vej, der er angivet i direktiven.

Besparelse som OBJ

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

OBJ bruger sager

  • Udveksling af mesh data mellem forskellige 3D værktøjer.
  • Import af modeller fra aktiebiblioteker, der distribuerer i OBJ-format.
  • Hurtig inspeksion af geometri uden komplekse scene hierarkier.

Tag: stereolithografi

STL er det standardformat til 3D-printing. Det repræsenterer rå trianguleret geometri uden materialer, farver eller scene hierarki. STl filer kommer i to varianter: ASCII (human-readable) og binær (compact).

Lader STL filer

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

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

Spar som STL

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

For at kontrollere produktionen, brug StlSaveOptions:

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

STL overvejelser

  • STL opbevarer kun triangulær geometri. materialer, teksturer og scenerikyrarki støttes ikke og kastes på eksport.
  • Eksporten af STL Ikke Binær STL skriver kun de første 3 vertikale af hver polygon ansigt; quad og n-gon ansigter er stille truncated. ASCII STl skriver alle vertex indikationerne per ansikt, der producerer forvrænget udgang for ikke-triangle ansikter. Altid bruge pre-trangulerede meses (alle triangles ansige) når eksporterer til ST L.
  • Binær STL er betydeligt mindre end ASCII STl for store modeller.
  • STL er det format, der vælges, når målet er en 3D printer eller slicer software.

GLTF: GL Transmission Format

GlTF er et moderne format designet til effektiv overførsel og opladning af 3D-indhold, især på nettet og i realtidsapplikationer. Det understøtter PBR materialer, scene hierarkier og animationer.

Lader gltf filer

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

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

Spar som gltf

Den grundlæggende indbevaring bruger filudvidelsen 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)Flip koordinatsystemet axis under eksport. Nyttigt ved konvertering fra Y-up til Z-Up eller omvendt.
setPrettyPrint(boolean)Formatere JSON-udgang med indentation for læsbarhed. false For mindre filstørrelse i produktionen.

GST bruger tilfælde

  • Webbaserede 3D-søgere (three.js, Babylon.js).
  • Realtids applikationer og spilmotorer.
  • Bevarelse af materiel definitioner i PBR-værktøjer.

FBX: Filmbox (kun import) og filmboks

FBX er et proprietært format fra Autodesk, som bruges i bred vifte i spiludvikling og digital indholdsskabelse. Aspose.3D FOSS for Java understøtter FBx for Kun import Eksport til FBX er ikke tilgængelig.

Det er kun binære FBX. FBX-importerer læser kun binære FBx filer. Passing en ASCII FB X-fil kastes ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Node hierarki og materiale ekstraktion fra FBX er ikke fuldt verifiseret; komplekse FB X scener kan ikke lastes fuldstændig.

FbX filer

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

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

Konverter FBX til andre formater

Da FBX eksport ikke støttes, konverterer de importerede FB X 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 bruger tilfælde

  • Import statisk mesh-forretninger fra Autodesk værktøjer (Maya, 3ds Max) og konvertering til andre formater.
  • Lad binær FBX geometri og re-eksport til glTF/GLB, OBJ eller STL.

Batch konverteringsformål

En almindelig arbejdsproces er at konvertere en hel katalog af filer fra et format til et andet. Her er et mønster for batch konvertering:

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

Det bærer alle .obj filer i en katalog, konverterer hver til glTF med godt udskrivet udgang, og sparer resultaterne. Du kan tilpasse denne mønster for enhver kilde-og målformat kombination.

Cross-format konverteringsreference

Følgende tabel viser, hvad man kan forvente ved konvertering mellem formater.

FratilGeometriMaterialerHierarkietNoter
OBJSTLBevarettabtN/ASTL har ingen materiel støtte
OBJGF / GLBBevaretOmdannet til PBRFladtMTL-materialer, der er mappet hvor det er muligt
STLOBJBevaretIngen afN/AIngen materialer i kilden
STLGF / GLBBevaretUndtagelsesmæssigtFladtDefaldende materiale anvendt
GldtfOBJBevaretEnkeltgjortFladtedePBR til grundlæggende materiale
GldtfSTLBevarettabtFladtedeGeometri kun
FBXOBJBevaretEnkeltgjortFladtedeMaterielle forenklinger
FBXSTLBevarettabtFladtedeGeometri kun
FBXGF / GLBBevaretOmdannet til PBRBevaretGod loyalitet

Generelle konverteringsvejledninger

  • Geometri er generelt bevaret over formatpar, med et vigtigt undtagelse: når man eksporterer til STL, må meshene bestå helt af triangle ansigter. binære STl stille trunkes quad og n-gon ansigt til deres første 3 vertikaler; ASCII ST L producerer forvrænget udgang for ikke-triangles ansige.
  • Materialer overleve bedst mellem glTF og FBX-importerede scener, der indeholder materialedata. konvertering til STL altid dropper materialer. Convertering til OBJ forenkler materialen til den grundlæggende MTL model.
  • Scenet hierarki er bevaret mellem glTF-formatfiler. OBJ og STL producerer flad strukturer. FBX hierarki og materiale ekstraktion er ikke fuldt verifiseret i denne version.

Sæt det hele sammen

Her er et komplet eksempel, der lader en OBJ-fil op, inspekterer dens knuder 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.");
    }
}

Samlet set

Aspose.3D FOSS for Java giver dig en konsekvent API over flere formater.:

  • OBJ - Enkel udveksling af mesh med grundlæggende materialer.
  • STL - Geometri-kun format til 3D printing pipe.
  • GF / GLB - moderne PBR-kapabel format til web og realtids brug. GltfSaveOptions Med setContentType(FileContentType.BINARY) for GLB udstyr.
  • FBX - kun import; rig format til opladning af aktiver fra spilmotorer og DCC værktøjer.

Brug formatspecifik opladning og gem valgklasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsNår du har brug for fingrøn kontrol over import- eller eksportprocessen.

For flere detaljer, besøg den 3D dokumentation eller blink kildekilde på GitHub.