Aspose.3D FOSS för Java stöder fem 3D-filerformat: OBJ, STL, GTTF, GLB,och FBX Denna post är en praktisk, format-by-format guide som visar hur man laddar och sparar var och en, vilka alternativ finns tillgängliga och hur du konverterar mellan dem.

Alla exempel använder sig av com.aspose.threed.* Förpackning :

import com.aspose.threed.*;

Maven beroende:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Format landskap

Innan du dykar in, här är en snabb översikt över de fyra format som stöds och deras typiska användningsfall.

FormateraUtvidgningenImport avExportenMaterialstödscen hierarki
OBJ.objJa jaJa jaBasiska (MTL filer)Flat
STL.stlJa jaJa jaIngenFlat
GTTF 2.0.gltfJa jaJa jaPBRFullt
GLB.glbJa jaJa jaPBRFullt
FBX.fbxJa jaNej inteRikaFullt

OBJ, STL, glTF och GLB stöds både import och export. FBX stödjs för Endast import.GLB (binär glTF) produceras via GltfSaveOptions med setContentType(FileContentType.BINARY).

OBJ: Wavefront objekt

OBJ är en av de mest stödda 3D-mäs format. Det lagrar geometri som platt text, med ett valfritt .mtl Kompanion filer för material.

Ladda upp OBJ filer

Det enklaste sättet är att passera filvägen direkt:

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

För mer kontroll, användning ObjLoadOptions:

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

När OBJ-filen refererar till en MTL-fil (via a) mtllib Direktivet), biblioteket kommer att försöka ladda materialdefinitioner automatiskt från det. MTL-filen bör vara i samma katalog som OBJ-fil eller på vägen som anges i direktivets.

Spara som OBJ

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

OBJ använder fall

  • Utbyte av mesh data mellan olika 3D-verktyg.
  • Importera modeller från tillgångsbibliotek som distribuerar i OBJ-format.
  • Snabb inspektör av geometri utan komplexa scenhierarkier.

STL: Stereolithografi

STL är det standardformat för 3D-utskrift. Det representerar rå triangulerad geometri utan material, färger eller scenhierarki. STl filer kommer i två varianter: ASCII (mänskligt lästa) och binär (kompakta).

Ladda upp STL filer

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

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

Spara som STL

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

För att kontrollera produktionen, använd StlSaveOptions:

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

STL överväganden

  • STL lagrar endast triangulär geometri. material, texturer och scenhierarki stöds inte och kastas på export.
  • STL Exporten gör inte binär STL skriver bara de första 3 vertikalerna av varje polygon ansikte; quad och n-gon ansikten är tyst trunkade. ASCII ST L skriver alla vertexindex per ansikt, vilket producerar malformad utgång för icke triangulära ansikter. Alltid använda pre-triangulerade meses (all-trigulera ansikts) när exporteras till STl.
  • Binär STL är betydligt mindre än ASCII STl för stora modeller.
  • STL är valformatet när målet är en 3D-skrivare eller slicerprogramvara.

GLTF: GL Transmission Format

GlTF är ett modernt format som är utformat för effektiv överföring och laddning av 3D-innehåll, särskilt på webben och i realtidsapplikationer. det stöder PBR-material, scenhierarkier och animationer.

Ladda ner gltf filer

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

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

Spara som gltf

Basisk spara använder filändelsen för att bestämma formatet:

scene.save("output.gltf");

För detaljerad kontroll, användning GltfSaveOptions:

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

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

GltfSaveOptions detaljer

Metodsyftet
setFlipCoordinateSystem(boolean)Flip koordinatsystem axel under export. Användbar när konvertera från Y-up till Z-Up eller vice versa.
setPrettyPrint(boolean)Formatera JSON-utgåvan med indentation för läsbarhet. false för mindre filstorlek i produktion.

GTTF Användning av fall

  • Webbaserade 3D-sökare (three.js, Babylon.js).
  • Realtidsanvändningar och spelmotorer.
  • Håll PBR-materialdefinitioner över verktyg.

FBX: Filmbox (Import endast)

FBX är ett proprietärt format av Autodesk som används i stor utsträckning inom spelutveckling och digitalt innehållsskapande. Aspose.3D FOSS för Java stöder FBx för Endast import Export till FBX är inte tillgänglig.

Binär FBX endast. FBX importerar bara binära FBx-filer. passera en ASCII FB X fil kastas ImportException("ASCII FBX format not yet supported - only binary FBX is supported").Nodehierarki och materialutvinning från FBX är inte fullt verifierad; komplexa FB X-scener kan inte ladda helt.

Ladda upp fbx filer

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

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

Konvertera FBX till andra format

Eftersom FBX-exporten inte stöds, konverterar du importerade FB X scener till 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 Används av fall

  • Import av statiska mässa tillgångar från Autodesk-verktyg (Maya, 3ds Max) och konvertering till andra format.
  • Ladda binär FBX geometri och återexportera till glTF/GLB, OBJ eller STL.

Batch omvandling

En vanlig arbetsflöde är att konvertera en hel katalog av filer från ett format till ett annat. Här är ett mönster för 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");
        }
    }
}

Detta belastar alla .obj fil i en katalog, konverterar var och en till glTF med bra utskriftsresultat, och sparar resultaten. Du kan anpassa denna mönster för någon kombination av käll- och målformat.

Cross-format konverteringsreferens

I tabellen nedan visas vad man kan förvänta sig när man konverterar mellan format.

FråntillGeometrimaterialHierarkierNoter
OBJSTLbevaradFörloradeN/ASTL har inget materialstöd
OBJGTTF / GLBbevaradOmvandlas till PBRFlatMTL-material kartläggs där det är möjligt
STLOBJbevaradIngenN/AInga material i källan
STLGTTF / GLBbevaradförfalskadFlatStandardmaterial som används
GTTFOBJbevaradförenkladeFlattenedPBR till grundmaterial
GTTFSTLbevaradFörloradeFlattenedGeometri endast
FBXOBJbevaradförenkladeFlattenedMaterialförenkling
FBXSTLbevaradFörloradeFlattenedGeometri endast
FBXGTTF / GLBbevaradOmvandlas till PBRbevaradBra lojalitet

Allmänna konverteringsriktlinjer

  • Geometri är i allmänhet bevaras över formatpar, med ett viktigt undantag: när man exporterar till STL måste mesh består helt av triangulära ansikten. binär ST L tyst trunkar quad och n-gon ansikter till sina första 3 vertikaler; ASCII STl producerar malformad utgång för icke-triangular ansikte.
  • material överleva bäst mellan glTF och FBX-importerade scener som innehåller materialdata. Konvertera till STL alltid droppar material. Converting till OBJ förenklar material till grundläggande MTL modell.
  • Scenär hierarki bevaras mellan glTF-formatfiler. OBJ och STL producerar fasta strukturer. FBX hierarki och materialutvinning är inte fullt verifierade i denna version.

Lägg det alla tillsammans

Här är ett komplett exempel som laddar en OBJ-fil, inspekterar dess noder och exporterar till både glTF och 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.");
    }
}

Sammanfattning

Aspose.3D FOSS för Java ger dig en konsekvent API över flera format.:

  • OBJ - Enkel mässa byte med grundmaterial.
  • STL - Geometri-enbart format för 3D-skrivningspullar.
  • GTTF / GLB - Modern PBR-kapabel format för web och realtidsbruk. GltfSaveOptions med setContentType(FileContentType.BINARY) för GLB produktion.
  • FBX - endast importeras; rik format för laddnings tillgångar från spelmotorer och DCC-verktyg.

Använd format-specifik last och spara alternativ klasser (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsNär du behöver fingrön kontroll över import- eller exportprocessen.

För mer detaljer, besök den Aspose.3D dokumentation eller bläddra i källan på GitHub.