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 primjena.

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 (binarni glTF) se proizvodi putem GltfSaveOptions s setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

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-a

  • Razmjena podataka o mrežama između različitih 3D alata.
  • Uvoz modela iz biblioteka sredstava 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 (čitljiva za čovjeka) i binarna (kompaktna).

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, koristite StlSaveOptions:

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

STL razmatranja

  • STL pohranjuje samo trokutnu geometriju. Materijali, teksture i hijerarhija scene nisu podržani i odbacuju se pri izvozu.
  • STL izvoz ne automatski triangulira. Binarni STL zapisuje samo prva 3 vrha svakog poligonalnog lica; četverokutna i n‑gon lica tiho se skraćuju. ASCII STL zapisuje sve indekse vrhova po licu, što rezultira neispravnim izlazom za lica koja nisu trokuti. Uvijek koristite unaprijed triangulirane mreže (sva lica su trokuti) pri izvozu u STL.
  • 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 (slicer).

glTF: GL Transmission Format

glTF je moderan format dizajniran za učinkovito prijenos i učitavanje 3D sadržaja, posebno na webu i u aplikacijama u stvarnom vremenu. Podržava PBR materijale, hijerarhije scene 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, koristite 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 konverziji 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.

Primjene glTF-a

  • Web‑temeljeni 3D preglednici (three.js, Babylon.js).
  • Aplikacije u stvarnom vremenu i game enginei.
  • Očuvanje PBR definicija materijala između alata.

FBX: Filmbox (samo uvoz)

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

Samo binarni FBX. FBX uvoznik čita samo binarne FBX datoteke. Prosljeđivanje ASCII FBX datoteke izaziva ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Hijerarhiju čvorova i izdvajanje materijala iz FBX-a nije u potpunosti provjereno; složene FBX scene možda se neće u potpunosti učitati. Animacije i rigging nisu implementirani.

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‑a u druge formate

Budući da izvoz FBX‑a 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 statičkih mesh resursa iz Autodesk alata (Maya, 3ds Max) i njihovo pretvaranje u druge formate.
  • Učitavanje binarne FBX geometrije i ponovni izvoz u glTF/GLB, OBJ ili STL.

Skupna konverzija

Uobičajeni tijek rada je pretvaranje cijelog direktorija datoteka iz jednog formata u drugi. Evo obrasca za skupnu 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. Ovaj obrazac možete prilagoditi 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čuvanoNemaN/ANema materijala u izvoru
STLglTF/GLBSačuvanoZadanoRavnoPrimijenjen zadani materijal
glTFOBJSačuvanoPojednostavljenoSpljoštenoPBR u osnovni materijal
glTFSTLSačuvanoIzgubljenoSpljoštenoSamo geometrija
FBXOBJSačuvanoPojednostavljenoSpljoštenoPojednostavljenje materijala
FBXSTLSačuvanoIzgubljenoIzravnatoSamo geometrija
FBXglTF/GLBSačuvanoPretvoreno u PBRSačuvanoDobra vjernost

Opće smjernice za konverziju

  • Geometrija općenito se očuva između parova formata, s jednom važnom iznimkom: pri izvozu u STL, mreže moraju se sastojati isključivo od trokutnih površina. Binary STL tiho skraćuje četverokutne i n‑gon površine na njihove prve 3 verteksa; ASCII STL generira neispravan izlaz za površine koje nisu trokuti.
  • Materijali najbolje preživljavaju između glTF i FBX‑uvezanih scena koje uključuju podatke o materijalima. Pretvaranje u STL uvijek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
  • Hijerarhija scene se očuva između glTF‑formatnih datoteka. OBJ i STL stvaraju ravne strukture. FBX hijerarhija i ekstrakcija materijala nisu u potpunosti provjereni u ovoj verziji.

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 za Java pruža vam dosljedno API‑je kroz više formata. Ključne točke:

  • OBJ – jednostavna razmjena mreža s osnovnim materijalima.
  • STL – format samo za geometriju za 3D‑printanje.
  • glTF / GLB – moderan format koji podržava PBR za web i real‑time upotrebu. Use GltfSaveOptions with setContentType(FileContentType.BINARY) for GLB output.
  • FBX – import only; rich format for loading assets from game engines and DCC tools.

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

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