Aspose.3D FOSS a Java számára öt 3D fájlformátumot támogat: OBJ, STL, glTF, GLB, és FBX (csak importálás).

Minden példa a com.aspose.threed.* csomagot:

import com.aspose.threed.*;

Maven függőség:

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

Formátum áttekintés

Mielőtt belemerülnénk, itt egy gyors áttekintés a négy támogatott formátumról és tipikus felhasználási eseteikről.

FormátumKiterjesztésImportálásExportálásAnyagtámogatásJelenet hierarchia
OBJ.objIgenIgenAlap (MTL fájlok)Lapos
STL.stlIgenIgenNincsLapos
glTF 2.0.gltfIgenIgenPBRTeljes
GLB.glbIgenIgenPBRTeljes
FBX.fbxIgenNemGazdagTeljes

Az OBJ, STL, glTF és GLB egyaránt támogatja az importálást és exportálást. Az FBX támogatott a csak importáláshoz. A GLB (bináris glTF) a következővel készül GltfSaveOptions val setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

Az OBJ az egyik legszélesebb körben támogatott 3D hálóformátum. Geometriát egyszerű szövegként tárol, opcionálisan .mtl kísérő fájl az anyagokhoz.

OBJ fájlok betöltése

A legegyszerűbb megközelítés, ha közvetlenül megadjuk a fájl útvonalát:

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

További irányításhoz használja ObjLoadOptions:

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

Amikor az OBJ fájl egy MTL fájlra hivatkozik (egy mtllib utasítás), a könyvtár megpróbálja automatikusan betölteni az anyagleírásokat. Az MTL fájlnak ugyanabban a könyvtárban kell lennie, mint az OBJ fájl, vagy a direktívában megadott útvonalon.

Mentés OBJ formátumban

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

OBJ felhasználási esetek

  • Hálóadatok cseréje különböző 3D eszközök között.
  • Modellek importálása olyan eszközkönyvtárakból, amelyek OBJ formátumban terjesztik őket.
  • Gyors geometriai ellenőrzés komplex jelenethierarchia nélkül.

STL: Stereolithography

Az STL a 3D nyomtatás szabványos formátuma. Nyers háromszögelt geometriai adatot ábrázol anyagok, színek vagy jelenethierarchia nélkül. Az STL fájlok két változatban érhetők el: ASCII (ember által olvasható) és bináris (tömör).

STL fájlok betöltése

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

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

Mentés STL-ként

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

A kimenet szabályozásához használja StlSaveOptions:

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

STL szempontok

  • Az STL csak háromszöggeometriát tárol. Anyagok, textúrák és jelenethierarchia nem támogatott, és exportáláskor elhagyásra kerülnek.
  • Az STL export nem automatikusan háromszögezi. A bináris STL csak az egyes sokszögfelületek első 3 csúcsát írja; a négyszög és n‑gon felületek csendben levágásra kerülnek. Az ASCII STL minden csúcsindexet felír minden felülethez, ami hibás kimenetet eredményez nem háromszög felületeknél. Mindig használjon előre háromszögezett hálókat (csak háromszög felületek) STL exportáláskor.
  • A bináris STL lényegesen kisebb, mint az ASCII STL nagy modellek esetén.
  • Az STL a választott formátum, ha a cél egy 3D nyomtató vagy szeletelő szoftver.

glTF: GL Transmission Format

A glTF egy modern formátum, amelyet a 3D tartalom hatékony továbbítására és betöltésére terveztek, különösen a weben és valós idejű alkalmazásokban. Támogatja a PBR anyagokat, a jelenethierarchiákat és az animációkat.

glTF fájlok betöltése

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

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

Mentés glTF-ként

Az alapvető mentés a fájlkiterjesztést használja a formátum meghatározásához:

scene.save("output.gltf");

Részletes vezérléshez használja GltfSaveOptions:

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

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

GltfSaveOptions részletek

MódszerCél
setFlipCoordinateSystem(boolean)Az exportálás során fordítsa meg a koordináta‑rendszer tengelyét. Hasznos, ha Y‑felfelé‑ről Z‑felfelé vagy fordítva konvertál.
setPrettyPrint(boolean)Formázza a kimeneti JSON‑t behúzással az olvashatóság érdekében. Állítsa be false a kisebb fájlméret érdekében a termelésben.

glTF felhasználási esetek

  • Webalapú 3D megjelenítők (three.js, Babylon.js).
  • Valós idejű alkalmazások és játékmotorok.
  • PBR anyagleírások megőrzése különböző eszközök között.

FBX: Filmbox (csak importálás)

Az FBX egy Autodesk által tulajdonjoggal védett formátum, amely széles körben használatos a játékfejlesztésben és a digitális tartalomkészítésben. Aspose.3D FOSS for Java támogatja az FBX‑et a csak importálásra — az FBX exportálás nem érhető el.

Csak bináris FBX. Az FBX importáló csak bináris FBX fájlokat olvas. ASCII FBX fájl átadása hibát dob ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). A FBX csomópont‑hierarchia és anyagkinyerés nem teljesen ellenőrzött; összetett FBX jelenetek esetleg nem töltődnek be teljesen. Az animációk és a riggelés nincsenek megvalósítva.

FBX fájlok betöltése

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

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

FBX átalakítása más formátumokra

Mivel az FBX export nem támogatott, konvertáld az importált FBX jeleneteket glTF, GLB, OBJ vagy STL formátumokra:

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

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

FBX felhasználási esetek

  • Statikus háló (mesh) eszközök importálása Autodesk eszközökből (Maya, 3ds Max) és átalakítása más formátumokra.
  • Bináris FBX geometria betöltése és újraexportálása glTF/GLB, OBJ vagy STL formátumba.

Kötegelt konvertálás

Egy gyakori munkafolyamat egy teljes könyvtár fájljainak átalakítása az egyik formátumból a másikba. Itt egy minta a kötegelt konvertáláshoz:

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

Ez betölti az összes .obj fájlt egy könyvtárban, átalakítja mindegyiket glTF formátumba szép formázott kimenettel, és elmenti az eredményeket. Ezt a mintát bármilyen forrás- és célformátum kombinációra adaptálhatja.

Keresztformátumú konvertálás referencia

Az alábbi táblázat mutatja, mire számíthat a formátumok közötti konvertálás során.

ForrásCélGeometriaAnyagokHierarchiaMegjegyzések
OBJSTLMegőrizveElveszettN/AAz STL nem támogat anyagokat
OBJglTF/GLBMegőrizveÁtalakítva PBR-reLaposMTL anyagok leképezve ahol lehetséges
STLOBJMegőrizveNincsN/ANincsenek anyagok a forrásban
STLglTF/GLBMegőrizveAlapértelmezettLaposAlapértelmezett anyag alkalmazva
glTFOBJMegőrizveEgyszerűsítettLaposítottPBR egyszerű anyagra
glTFSTLMegőrizveElveszettLaposítottCsak geometria
FBXOBJMegőrizveEgyszerűsítettLaposítottAnyag egyszerűsítése
FBXSTLMegőrizveElveszettLaposítottCsak geometria
FBXglTF/GLBMegőrzöttÁtalakítva PBR-reMegőrizveJó hűség

Általános konvertálási irányelvek

  • Geometria Általában megmarad a formátumpárok között, egy fontos kivétellel: STL-be exportáláskor a hálók kizárólag háromszög felületekből állhatnak. A bináris STL csendben levágja a négyszög és n‑gon felületek első 3 csúcsát; az ASCII STL hibás kimenetet generál nem háromszög felületek esetén.
  • Anyagok legjobban megmarad a glTF és az anyagadatokat tartalmazó FBX-importált jelenetek között. Az STL-re konvertálás mindig elhagyja az anyagokat. Az OBJ-re konvertálás egyszerűsíti az anyagokat az alap MTL modellre.
  • Jelenet hierarchia megmarad a glTF-formátumú fájlok között. Az OBJ és az STL lapos struktúrákat hoz létre. Az FBX hierarchia és anyagkinyerés nem teljesen ellenőrzött ebben a verzióban.

Mindent egy helyen

Itt egy teljes példa, amely betölt egy OBJ fájlt, megvizsgálja a csomópontjait, és exportálja mind glTF, mind GLB formátumba:

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

Összefoglalás

Aspose.3D FOSS for Java egy konzisztens API-t biztosít több formátumon keresztül. A főbb pontok:

  • OBJ – egyszerű hálócsere alap anyagokkal.
  • STL – csak geometriai formátum 3D nyomtatási folyamatokhoz.
  • glTF / GLB – modern, PBR-képes formátum webes és valós idejű használatra. Használja GltfSaveOptions a setContentType(FileContentType.BINARY) GLB kimenethez.
  • FBX – csak importálásra; gazdag formátum eszközök betöltéséhez játékmotorokból és DCC eszközökből.

Használjon formátum-specifikus betöltési és mentési opcióosztályokat (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) amikor finomhangolt vezérlésre van szükség az import vagy export folyamat során.

További részletekért látogassa meg a Aspose.3D dokumentáció vagy böngészze a forrást GitHub.