Aspose.3D FOSS pentru Java suportă cinci formate de fișiere 3D: OBJ, STL, glTF, GLB, și FBX (doar import).

Toate exemplele folosesc com.aspose.threed.* pachetul:

import com.aspose.threed.*;

Dependență Maven:

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

Peisajul formatelor

Înainte de a începe, iată o scurtă prezentare a celor patru formate suportate și a cazurilor lor tipice de utilizare.

FormatExtensieImportExportSuport materialIerarhia scenei
OBJ.objDaDaDe bază (fișiere MTL)Plat
STL.stlDaDaNimicPlat
glTF 2.0.gltfDaDaPBRComplet
GLB.glbDaDaPBRComplet
FBX.fbxDaNuBogătosComplet

OBJ, STL, glTF și GLB suportă atât importul, cât și exportul. FBX este suportat pentru doar import. GLB (binary glTF) este produs prin GltfSaveOptions cu setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ este unul dintre cele mai răspândite formate de rețea 3D. Stochează geometria ca text simplu, cu un opțional .mtl fișier însoțitor pentru materiale.

Încărcarea fișierelor OBJ

Cea mai simplă abordare este să transmiteți calea fișierului direct:

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

Pentru un control mai mare, utilizați ObjLoadOptions:

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

Când fișierul OBJ face referire la un fișier MTL (printr-un mtllib directivă), biblioteca va încerca să încarce automat definițiile de material din acesta. Fișierul MTL ar trebui să fie în același director cu fișierul OBJ sau la calea specificată în directivă.

Salvare ca OBJ

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

Cazuri de utilizare OBJ

  • Schimbarea datelor de plasă între diferite instrumente 3D.
  • Importarea modelelor din bibliotecile de active care distribuie în format OBJ.
  • Inspecție rapidă a geometriei fără ierarhii de scenă complexe.

STL: Stereolitografie

STL este formatul standard pentru imprimarea 3D. Reprezintă geometrie triunghiulară brută fără materiale, culori sau ierarhie de scenă. Fișierele STL vin în două variante: ASCII (citibil de om) și binar (compact).

Încărcarea fișierelor STL

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

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

Salvare ca STL

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

Pentru a controla ieșirea, utilizați StlSaveOptions:

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

Considerații STL

  • Fișierele STL conțin doar geometrie triunghiulară. Materialele, texturile și ierarhia scenei se pierd în timpul exportului.
  • STL binar este semnificativ mai mic decât STL ASCII pentru modele mari.
  • STL este formatul preferat atunci când ținta este o imprimantă 3D sau un software de feliere.

glTF: Format de Transmisie GL

glTF este un format modern conceput pentru transmiterea și încărcarea eficientă a conținutului 3D, în special pe web și în aplicații în timp real. Suportă materiale PBR, ierarhii de scenă și animații.

Încărcarea fișierelor glTF

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

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

Salvare ca glTF

Salvarea de bază folosește extensia fișierului pentru a determina formatul:

scene.save("output.gltf");

Pentru un control detaliat, utilizați GltfSaveOptions:

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

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

Detalii GltfSaveOptions

MetodăScop
setFlipCoordinateSystem(boolean)Inversează axa sistemului de coordonate în timpul exportului. Util pentru conversia de la Y-up la Z-up sau invers.
setPrettyPrint(boolean)Formatează JSON‑ul de ieșire cu indentare pentru lizibilitate. Setează la false pentru dimensiune de fișier mai mică în producție.

Cazuri de utilizare glTF

  • Vizualizatoare 3D bazate pe web (three.js, Babylon.js).
  • Aplicații în timp real și motoare de jocuri.
  • Păstrarea definițiilor de materiale PBR între diferite instrumente.

FBX: Filmbox (Numai import)

FBX este un format proprietar de la Autodesk, utilizat pe scară largă în dezvoltarea de jocuri și crearea de conținut digital. Suportă ierarhii de scenă complexe, materiale și animații. Aspose.3D FOSS pentru Java suportă FBX pentru doar import – exportul către FBX nu este disponibil.

Încărcarea fișierelor FBX

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

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

Convertirea FBX în alte formate

Deoarece exportul FBX nu este suportat, convertiți scenele FBX importate în glTF, GLB, OBJ sau STL:

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

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

Cazuri de utilizare FBX

  • Importarea de active din instrumentele Autodesk (Maya, 3ds Max) și convertirea în alte formate.
  • Se încarcă personaje rigate și scene animate pentru reexportare în glTF/GLB.

Conversie în lot

Un flux de lucru comun este convertirea unui întreg director de fișiere dintr-un format în altul. Iată un model pentru conversia în lot:

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

Acesta încarcă fiecare .obj fișier dintr-un director, convertește fiecare în glTF cu ieșire formatată frumos și salvează rezultatele. Poți adapta acest model pentru orice combinație de format sursă și destinație.

Referință pentru conversia între formate

Tabelul de mai jos arată la ce să te aștepți când convertești între formate.

De laCătreGeometrieMaterialeIerarhieNote
OBJSTLPăstratPierdutN/ASTL nu are suport pentru materiale
OBJglTF/GLBPăstratConvertit în PBRPlatMateriale MTL mapate acolo unde este posibil
STLOBJPăstratNimicN/ANiciun material în sursă
STLglTF/GLBPăstratImplicitPlatMaterial implicit aplicat
glTFOBJPăstratSimplificatAplatizatPBR la material de bază
glTFSTLPăstratPierdutAplatizatDoar geometrie
FBXOBJPăstratSimplificatAplatizatSimplificare materială
FBXSTLPăstratPierdutAplatizatDoar geometrie
FBXglTF/GLBPăstratConvertit la PBRPăstratFidelitate bună

Ghiduri generale de conversie

  • Geometrie este întotdeauna păstrată în toate perechile de formate.
  • Materiale rezistă cel mai bine între glTF și FBX, ambele susțin modele de materiale bogate. Conversia în STL elimină întotdeauna materialele. Conversia în OBJ simplifică materialele la modelul de bază MTL.
  • Ierarhia scenei este păstrată între glTF și FBX. OBJ și STL produc structuri plate.

Punând totul împreună

Iată un exemplu complet care încarcă un fișier OBJ, inspectează nodurile sale și exportă atât în glTF, cât și în 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.");
    }
}

Rezumat

Aspose.3D FOSS for Java îți oferă un API consistent pe multiple formate. Punctele cheie:

  • OBJ – schimb simplu de mesh-uri cu materiale de bază.
  • STL – format doar pentru geometrie, destinat fluxurilor de imprimare 3D.
  • glTF / GLB – format modern capabil PBR pentru utilizare pe web și în timp real. Utilizați GltfSaveOptions cu setContentType(FileContentType.BINARY) pentru ieșire GLB.
  • FBX – doar import; format bogat pentru încărcarea activelor din motoarele de joc și instrumentele DCC.

Utilizați clasele de opțiuni de încărcare și salvare specifice formatului (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) când aveți nevoie de un control detaliat asupra procesului de import sau export.

Pentru mai multe detalii, vizitați Aspose.3D documentație sau navigați sursa pe GitHub.