Aspose.3D FOSS pro Java podporuje pět 3D formátů souboru: OBJ, STL, Gltf, GLB,a FBX Tento příspěvek je praktický, formát-by-formát průvodce ukazující, jak si každý z nich naložit a uložit, které možnosti jsou k dispozici a jak mezi nimi převést.

Všechny příklady používají com.aspose.threed.* Paketní balíček :

import com.aspose.threed.*;

Maven závislost:

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

Formát krajiny

Před potápěním, zde je rychlý přehled čtyř podporovaných formátů a jejich typických případů použití.

FormátRozšířenídovozuVývozMateriální podporaHierarchie scény
OBJ.objAno anoAno anoZákladní (MTL soubory)ploché
STL.stlAno anoAno anoŽádnýploché
GTTF 2.0.gltfAno anoAno anoPBRplnohodnotné
GLB.glbAno anoAno anoPBRplnohodnotné
FBX.fbxAno anoNebohatýplnohodnotné

OBJ, STL, glTF a GLB podporují jak dovoz, tak vývoz. pouze dovoz.GLB (binární glTF) je produkován prostřednictvím GltfSaveOptions s setContentType(FileContentType.BINARY).

OBJ: Wavefront objekty

OBJ je jedním z nejvíce podporovaných 3D formátů. ukládá geometrii jako plochý text, s volitelným .mtl Příslušenství pro materiály.

Přihlašování OBJ souborů

Nejjednodušší je přejít přes souborovou stezku přímo:

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

Pro větší kontrolu, použití ObjLoadOptions:

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

Pokud je soubor OBJ odkazem na soubory MTL (prostřednictvím mtllib Směrnice), knihovna se pokusí automaticky nahrát definice materiálu z ní. soubor MTL by měl být ve stejném adresáři jako soubory OBJ nebo na cestě stanovené v směrnici.

Shromažďování jako OBJ

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

OBJ používá případy

  • Výměna dat mezi různými 3D nástroji.
  • Import modelů z knihoven aktiv, které distribuují ve formátu OBJ.
  • Rychlá kontrola geometry bez komplexních hierarchii scény.

Štítky: stereolithography

STL je standardní formát pro 3D tisk. představuje surovou trojúhelníkovou geometrii bez materiálů, barev nebo hierarchie scény. soubory STl se objevují ve dvou variantách: ASCII (lidské čitelné) a binární (kompaktní).

Stáhnout STL soubory

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

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

Úspora jako STL

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

Pro kontrolu výstupu, použití StlSaveOptions:

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

STL hodnocení

  • STL ukládá pouze trojúhelníkovou geometrii. materiály, textury a hierarchie scény nejsou podporovány a jsou vypuštěny na export.
  • Exportní STL Ne Binární STL píše pouze první 3 vertikály každé polygonové tváře; čtvercové a n-gonové obličeje jsou tiše trunčované. ASCII STl píší všechny vertické indexy na tvář, což produkuje malformovaný výstup pro ne-triangle obličejů. Vždy používejte předtríhované masy (všechny triangles) při exportu do ST L.
  • Binární STL je výrazně menší než ASCII STl pro velké modely.
  • STL je formát volby, kdy cílem je 3D tiskárna nebo slicer software.

GLTF: Přenosový formát

glTF je moderní formát určený pro efektivní přenos a načítání 3D obsahu, zejména na webu a v reálném čase aplikací. podporuje PBR materiály, hierarchie scény a animace.

Přihlašování GLTF souborů

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

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

Úspora jako glTF

Základní úložník používá rozšíření souboru k určení formátu:

scene.save("output.gltf");

Pro podrobnou kontrolu, použití GltfSaveOptions:

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

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

GltfSaveOptions podrobnosti

MetodaÚčel
setFlipCoordinateSystem(boolean)Flip koordinátní systém osy během exportu. Užitečné při konverzi z Y-up na Z-Up nebo naopak.
setPrettyPrint(boolean)Formátování výstupu JSON s indentací pro čitelnost. false Pro menší velikost souboru v produkci.

GLTF používá případy

  • 3D prohlížeče na webu (three.js, Babylon.js).
  • Reálné aplikace a herní motory.
  • Udržování definic PBR materiálů přes nástroje.

FBX: Filmbox (pouze import)

FBX je vlastnický formát společnosti Autodesk, který se široce používá v oblasti vývoje her a digitálního obsahu. Aspose.3D FOSS pro Java podporuje FBx pro pouze dovoz Export na FBX není k dispozici.

Binární FBX pouze. FBX importér čte pouze binární fbx soubory. procházející ASCII fbs soubor vrhá ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). hierarchie node a materiální extrakce z FBX nejsou plně ověřeny; složité scény FB X nemusí být zcela nabité.

Stáhnout fbx soubory

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

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

Konverze FBX do jiných formátů

Vzhledem k tomu, že export FBX není podporován, konvertujte dovezené scény FB X na glTF, GLB, OBJ nebo STL:

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

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

FBX používá případy

  • Import statických mezových aktiv z nástrojů Autodesk (Maya, 3ds Max) a konverze do jiných formátů.
  • Nabíjení binární geometrie FBX a re-export do glTF/GLB, OBJ nebo STL.

Batch konverze

Jedním z běžných pracovních toků je konverze celého adresáře souborů z jednoho formátu do druhého. zde je vzor pro konverzi sadu:

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

To se zatěžuje každému .obj soubor v adresáři, konvertovat každý do glTF s pěkně vytisknutým výstupem a ušetří výsledky.Můžete přizpůsobit tento vzorek pro jakékoli kombinace zdrojového a cílového formátu.

Cross-formátová konverze

Následující tabulka ukazuje, co očekávat při konverzi mezi formáty.

odNaGeometrieMateriályHierarchiePoznámky
OBJSTLzachovánoZtracenN/ASTL nemá žádnou materiální podporu
OBJGLTF / GLBzachovánoPřepracované na PBRplochéMTL materiály mapované, kde je to možné
STLOBJzachovánoŽádnýN/AŽádný materiál v zdroji
STLGLTF / GLBzachovánoPodmínkouplochéVyužitý materiál
GltfOBJzachovánozjednodušenéFlattenováPBR do základní materiály
GltfSTLzachovánoZtracenFlattenováGeometrie pouze
FBXOBJzachovánozjednodušenéFlattenováMateriální zjednodušení
FBXSTLzachovánoZtracenFlattenováGeometrie pouze
FBXGLTF / GLBzachovánoPřepracované na PBRzachovánoDobrá věrnost

Obecné pokyny pro konverzi

  • Geometrie je obecně zachovávána v rámci formátových párů, s jedním důležitým výjimkou: při exportu do STL musí být meze zcela tvořena trojstrannými tvářími. binární ST L tiše trunčí čtvercové a n-gonové tváře do prvních 3 vrstv; ASCII STl produkuje malformovaný výsledek pro ne-triangulární tvář.
  • Materiály přežijte nejlépe mezi glTF a FBX-importující scény, které obsahují materiální údaje. Konverze na STL vždy klesá materiál. Converting na OBJ zjednodušuje materiály k základnímu modelu MTL.
  • Hierarchie scény je zachován mezi soubory formátu glTF. OBJ a STL produkují ploché struktury. hierarchie FBX a materiálové extrakce nejsou v této verzi plně ověřeny.

Vložte to vše dohromady

Zde je kompletní příklad, který nahrává soubor OBJ, kontroluje jeho uzly a vyváží se do obou glTF a 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.");
    }
}

Shrnutí

Aspose.3D FOSS pro Java vám poskytuje konzistentní API v několika formátech.:

  • OBJ - jednoduchá výměna míchy s základními materiály.
  • STL - geometrický formát pouze pro 3D tiskové potrubí.
  • GLTF / GLB - moderní formát PBR-kapitelný pro webové a reálné používání. GltfSaveOptions s setContentType(FileContentType.BINARY) Výroba na GLB.
  • FBX - pouze dovoz; bohatý formát pro nabíjení aktiv z herních motorů a nástrojů DCC.

Využijte typy a možnosti pro výběr (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptionsb) pokud potřebujete jemně upravenou kontrolu dovozního nebo vývozního procesu.

Pro více detailů navštivte Aspose.3D dokumentace nebo přejděte do zdroje GitHub.