Aspose.3D FOSS pre Java podporuje päť 3D formátov súborov: OBJ, STL, glTF, GLB, a FBX (iba import).

Všetky príklady používajú com.aspose.threed.* balík:

import com.aspose.threed.*;

Maven závislosť:

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

Prehľad formátov

Predtým, než sa pustíme, tu je stručný prehľad štyroch podporovaných formátov a ich typických prípadov použitia.

FormátRozšírenieImportovaťExportovaťPodpora materiálovHierarchia scény
OBJ.objÁnoÁnoZákladné (MTL súbory)Plochý
STL.stlÁnoÁnoŽiadnePlochý
glTF 2.0.gltfÁnoÁnoPBRPlný
GLB.glbÁnoÁnoPBRPlný
FBX.fbxÁnoNieBohatéÚplné

OBJ, STL, glTF a GLB podporujú import aj export. FBX je podporovaný pre iba import. GLB (binárny glTF) sa vytvára pomocou GltfSaveOptions s setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ je jedným z najrozšírenejších formátov 3D sietí. Ukladá geometriu ako obyčajný text, s voliteľným .mtl sprievodný súbor pre materiály.

Načítanie OBJ súborov

Najjednoduchší prístup je odovzdať cestu k súboru priamo:

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

Pre väčšiu kontrolu použite ObjLoadOptions:

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

Keď OBJ súbor odkazuje na MTL súbor (prostredníctvom mtllib direktívy), knižnica sa pokúsi načítať definície materiálov z neho automaticky. MTL súbor by mal byť v rovnakom adresári ako OBJ súbor alebo na ceste špecifikovanej v direktíve.

Ukladanie ako OBJ

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

Prípady použitia OBJ

  • Vymieňanie dát o meshi medzi rôznymi 3D nástrojmi.
  • Importovanie modelov z knižníc assetov, ktoré distribuujú vo formáte OBJ.
  • Rýchla kontrola geometrie bez zložitých hierarchií scény.

STL: Stereolitografia

STL je štandardný formát pre 3D tlač. Reprezentuje surovú triangulovanú geometriu bez materiálov, farieb ani hierarchie scény. Súbory STL existujú v dvoch variantách: ASCII (čitateľná pre človeka) a binárna (kompaktná).

Načítanie súborov STL

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

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

Ukladanie ako STL

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

Na ovládanie výstupu použite StlSaveOptions:

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

Úvahy o STL

  • Súbory STL obsahujú iba triangulovanú geometriu. Materiály, textúry a hierarchia scény sa pri exporte stratia.
  • Binárny STL je pre veľké modely podstatne menší ako ASCII STL.
  • STL je formátom voľby, keď je cieľom 3D tlačiareň alebo slicer softvér.

glTF: GL Transmission Format

glTF je moderný formát navrhnutý pre efektívny prenos a načítanie 3D obsahu, najmä na webe a v aplikáciách v reálnom čase. Podporuje PBR materiály, hierarchie scény a animácie.

Načítavanie súborov glTF

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

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

Ukladanie ako glTF

Základné ukladanie používa príponu súboru na určenie formátu:

scene.save("output.gltf");

Pre podrobnejšiu kontrolu použite GltfSaveOptions:

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

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

Podrobnosti GltfSaveOptions

MetódaÚčel
setFlipCoordinateSystem(boolean)Preklopte os súradnicového systému počas exportu. Užitočné pri konverzii z Y-up na Z-up alebo naopak.
setPrettyPrint(boolean)Formátujte výstupný JSON s odsadením pre čitateľnosť. Nastavte na false pre menšiu veľkosť súboru v produkcii.

Prípady použitia glTF

  • Webové 3D prehliadače (three.js, Babylon.js).
  • Aplikácie v reálnom čase a herné enginy.
  • Zachovanie definícií PBR materiálov naprieč nástrojmi.

FBX: Filmbox (iba import)

FBX je proprietárny formát od Autodesk, ktorý je široko používaný vo vývoji hier a tvorbe digitálneho obsahu. Podporuje bohaté hierarchie scény, materiály a animácie. Aspose.3D FOSS pre Java podporuje FBX pre iba import – export do FBX nie je k dispozícii.

Načítanie súborov FBX

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

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

Konverzia FBX do iných formátov

Keďže export FBX nie je podporovaný, konvertujte importované scény FBX do glTF, GLB, OBJ alebo STL:

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

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

Príklady použitia FBX

  • Importovanie aktív z nástrojov Autodesk (Maya, 3ds Max) a konverzia do iných formátov.
  • Načítavajú sa rigované postavy a animované scény pre opätovný export do glTF/GLB.

Dávková konverzia

Bežný pracovný postup je konverzia celého adresára súborov z jedného formátu do druhého. Tu je vzor pre dávkovú konverziu:

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

Toto načíta každý .obj súbor v adresári, prevedie každý do glTF s pekne formátovaným výstupom a uloží výsledky. Tento vzor môžete prispôsobiť pre akúkoľvek kombináciu vstupného a výstupného formátu.

Referenčný prehľad konverzie medzi formátmi

Nasledujúca tabuľka ukazuje, čo očakávať pri konverzii medzi formátmi.

ZDoGeometriaMateriályHierarchiaPoznámky
OBJSTLZachovanéStratenéN/ASTL nemá podporu materiálov
OBJglTF/GLBZachovanéPrevedené na PBRPlochýMateriály MTL namapované, kde je to možné
STLOBJZachovanéŽiadneN/AŽiadne materiály v zdroji
STLglTF/GLBZachovanéPredvolenéPlochýPoužitý predvolený materiál
glTFOBJZachovanéZjednodušenéSploštenéPBR na základný materiál
glTFSTLZachovanéStratenéZploštenéIba geometria
FBXOBJZachovanéZjednodušenéZploštenéZjednodušenie materiálu
FBXSTLZachovanéStratenéZploštenéIba geometria
FBXglTF/GLBZachovanéPrevedené na PBRZachovanéDobrá vernosť

Všeobecné usmernenia pre konverziu

  • Geometria je vždy zachovaná naprieč všetkými pármi formátov.
  • Materiály najlepšie prežívajú medzi glTF a FBX, ktoré oba podporujú bohaté modely materiálov. Konverzia do STL vždy odstraňuje materiály. Konverzia do OBJ zjednodušuje materiály na základný model MTL.
  • Hierarchia scény je zachovaná medzi glTF a FBX. OBJ a STL vytvárajú ploché štruktúry.

Zhrnutie všetkého

Tu je kompletný príklad, ktorý načíta súbor OBJ, skontroluje jeho uzly a exportuje do glTF aj 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.");
    }
}

Zhrnutie

Aspose.3D FOSS for Java vám poskytuje konzistentné API naprieč viacerými formátmi. Kľúčové body:

  • OBJ – jednoduchá výmena sietí s základnými materiálmi.
  • STL – formát len pre geometriu pre 3D tlačové pipeliney.
  • glTF / GLB – moderný formát podporujúci PBR pre web a použitie v reálnom čase. Použiť GltfSaveOptions s setContentType(FileContentType.BINARY) pre výstup GLB.
  • FBX – iba import; bohatý formát na načítanie aktív z herných enginov a DCC nástrojov.

Použite triedy možností načítania a ukladania špecifické pre formát (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions).

Pre viac podrobností navštívte Aspose.3D dokumentáciu alebo si prezerajte zdroj na GitHub.