Aspose.3D FOSS za Java podržava pet 3D formata datoteka: OBJ, STL, glTF, GLB, i FBX (samo uvoz).

Svi primjeri koriste com.aspose.threed.* paket:

import com.aspose.threed.*;

Maven ovisnost:

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

Pregled formata

Prije nego što zaronimo, evo kratkog pregleda četiri podržana formata i njihovih tipičnih slučajeva upotrebe.

FormatEkstenzijaUvozIzvozPodrška za materijaleHijerarhija scene
OBJ.objDaDaOsnovno (MTL datoteke)Ravno
STL.stlDaDaNištaRavno
glTF 2.0.gltfDaDaPBRPotpuno
GLB.glbDaDaPBRPotpuno
FBX.fbxDaNeBogatoPotpuno

OBJ, STL, glTF i GLB podržavaju i uvoz i izvoz. FBX je podržan za samo uvoz. GLB (binary glTF) se proizvodi putem GltfSaveOptions s setContentType(FileContentType.BINARY).

OBJ: Wavefront objekt

OBJ je jedan od najšire podržanih 3D formata mreža. Pohranjuje geometriju kao običan tekst, s opcionalnim .mtl prateća datoteka za materijale.

Učitavanje OBJ datoteka

Najjednostavniji pristup je proslijediti putanju datoteke izravno:

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

Za veću kontrolu, upotrijebite ObjLoadOptions:

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

Kada OBJ datoteka referencira MTL datoteku (putem mtllib direktive), biblioteka će pokušati automatski učitati definicije materijala iz nje. MTL datoteka bi trebala biti u istom direktoriju kao OBJ datoteka ili na putu navedenom u direktivi.

Spremanje kao OBJ

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

Primjene OBJ formata

  • Razmjena podataka o mreži između različitih 3D alata.
  • Uvoz modela iz biblioteka resursa koje distribuiraju u OBJ formatu.
  • Brza inspekcija geometrije bez složenih hijerarhija scene.

STL: Stereolitografija

STL je standardni format za 3D ispis. Predstavlja sirovu trianguliranu geometriju bez materijala, boja ili hijerarhije scene. STL datoteke dolaze u dvije varijante: ASCII (čovjeku čitljivo) i binarne (kompaktne).

Učitavanje STL datoteka

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

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

Spremanje kao STL

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

Za kontrolu izlaza, upotrijebite StlSaveOptions:

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

STL razmatranja

  • STL datoteke sadrže samo trianguliranu geometriju. Materijali, teksture i hijerarhija scene gube se pri izvozu.
  • Binarni STL je znatno manji od ASCII STL-a za velike modele.
  • STL je format po izboru kada je cilj 3D pisač ili softver za rezanje.

glTF: GL Transmission Format

glTF je moderan format dizajniran za učinkovit prijenos i učitavanje 3D sadržaja, posebno na webu i u aplikacijama u stvarnom vremenu. Podržava PBR materijale, hijerarhije scena i animacije.

Učitavanje glTF datoteka

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

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

Spremanje kao glTF

Osnovno spremanje koristi ekstenziju datoteke za određivanje formata:

scene.save("output.gltf");

Za detaljnu kontrolu, upotrijebite GltfSaveOptions:

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

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

Detalji GltfSaveOptions

MetodaSvrha
setFlipCoordinateSystem(boolean)Preokrenite os koordinatnog sustava tijekom izvoza. Korisno pri pretvaranju iz Y‑gore u Z‑gore ili obrnuto.
setPrettyPrint(boolean)Formatirajte izlazni JSON s uvlačenjem radi čitljivosti. Postavite na false za manju veličinu datoteke u produkciji.

Primjeri upotrebe glTF

  • Web‑temeljeni 3D preglednici (three.js, Babylon.js).
  • Aplikacije u stvarnom vremenu i game enginei.
  • Čuvanje PBR definicija materijala kroz alate.

FBX: Filmbox (Samo uvoz)

FBX je vlasnički format tvrtke Autodesk koji se široko koristi u razvoju igara i stvaranju digitalnog sadržaja. Podržava bogate hijerarhije scena, materijale i animacije. Aspose.3D FOSS za Java podržava FBX za samo uvoz – izvoz u FBX nije dostupan.

Učitavanje FBX datoteka

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

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

Pretvaranje FBX u druge formate

Budući da izvoz FBX nije podržan, pretvorite uvezene FBX scene u glTF, GLB, OBJ ili STL:

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

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

Primjene FBX-a

  • Uvoz sredstava iz Autodesk alata (Maya, 3ds Max) i pretvaranje u druge formate.
  • Učitavanje rigiranih likova i animiranih scena za ponovni izvoz u glTF/GLB.

Serijska konverzija

Uobičajeni tijek rada je pretvaranje cijelog direktorija datoteka s jednog formata na drugi. Evo obrasca za serijsku konverziju:

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

Ovo učitava svaki .obj datoteku u direktoriju, pretvara svaku u glTF s lijepo formatiranim izlazom i sprema rezultate. Možete prilagoditi ovaj uzorak za bilo koju kombinaciju izvornog i odredišnog formata.

Referenca za konverziju između formata

Sljedeća tablica prikazuje što možete očekivati pri konverziji između formata.

IzUGeometrijaMaterijaliHijerarhijaBilješke
OBJSTLSačuvanoIzgubljenoN/ASTL nema podršku za materijale
OBJglTF/GLBSačuvanoPretvoreno u PBRRavnoMTL materijali mapirani gdje je moguće
STLOBJSačuvanoNijedanN/ANema materijala u izvoru
STLglTF/GLBSačuvanoZadanoRavnoPrimijenjen zadani materijal
glTFOBJSačuvanoPojednostavljenoIzravnanoPBR u osnovni materijal
glTFSTLSačuvanoIzgubljenoSpljoštenoSamo geometrija
FBXOBJSačuvanoPojednostavljenoSpljoštenoPojednostavljenje materijala
FBXSTLSačuvanoIzgubljenoSpljoštenoSamo geometrija
FBXglTF/GLBSačuvanoPretvoreno u PBRSačuvanoDobra vjernost

Opće smjernice za konverziju

  • Geometrija uvijek se očuva u svim parovima formata.
  • Materijali najbolje se očuvaju između glTF i FBX, koji oba podržavaju bogate modele materijala. Pretvaranje u STL uvijek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
  • Hijerarhija scene se očuva između glTF i FBX. OBJ i STL stvaraju ravne strukture.

Sastavljanje svega zajedno

Evo cjelovitog primjera koji učitava OBJ datoteku, pregledava njene čvorove i izvozi u i glTF i 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.");
    }
}

Sažetak

Aspose.3D FOSS for Java daje vam dosljedni API kroz više formata. Ključne točke:

  • OBJ – jednostavna razmjena mreža s osnovnim materijalima.
  • STL – format samo za geometriju za 3D tiskanje.
  • glTF / GLB – moderan format koji podržava PBR za web i real-time upotrebu. Koristite GltfSaveOptions s setContentType(FileContentType.BINARY) za GLB izlaz.
  • FBX – samo uvoz; bogati format za učitavanje sredstava iz game enginea i DCC alata.

Koristite klase opcija učitavanja i spremanja specifične za format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kada trebate finu kontrolu nad procesom uvoza ili izvoza.

Za više detalja, posjetite Aspose.3D dokumentaciju ili pregledajte izvor na GitHub.