Aspose.3D FOSS per Java supporta cinque formati di file 3D: OBJ, STL, glTF, GLB, e FBX (solo importazione).

Tutti gli esempi utilizzano il com.aspose.threed.* pacchetto:

import com.aspose.threed.*;

Dipendenza Maven:

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

Panorama dei Formati

Prima di immergerti, ecco una rapida panoramica dei quattro formati supportati e dei loro tipici casi d’uso.

FormatoEstensioneImportaEsportaSupporto materialeGerarchia della scena
OBJ.objBase (file MTL)Piatto
STL.stlNessunoPiatto
glTF 2.0.gltfPBRCompleto
GLB.glbPBRCompleto
FBX.fbxNoRiccoCompleto

OBJ, STL, glTF e GLB supportano sia l’importazione che l’esportazione. FBX è supportato per solo importazione. GLB (binary glTF) è prodotto tramite GltfSaveOptions con setContentType(FileContentType.BINARY).

OBJ: Wavefront Object

OBJ è uno dei formati di mesh 3D più ampiamente supportati. Memorizza la geometria come testo semplice, con un opzionale .mtl file companion per i materiali.

Caricamento dei file OBJ

L’approccio più semplice è passare direttamente il percorso del file:

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

Per un maggiore controllo, usa ObjLoadOptions:

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

Quando il file OBJ fa riferimento a un file MTL (tramite un mtllib direttiva), la libreria cercherà di caricare automaticamente le definizioni dei materiali da esso. Il file MTL dovrebbe trovarsi nella stessa directory del file OBJ o nel percorso specificato nella direttiva.

Salvataggio come OBJ

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

Casi d’uso di OBJ

  • Scambio di dati mesh tra diversi strumenti 3D.
  • Importazione di modelli da librerie di asset che distribuiscono in formato OBJ.
  • Ispezione rapida della geometria senza gerarchie di scena complesse.

STL: Stereolitografia

STL è il formato standard per la stampa 3D. Rappresenta geometria triangolata grezza senza materiali, colori o gerarchia di scena. I file STL sono disponibili in due varianti: ASCII (leggibile dall’uomo) e binario (compatto).

Caricamento di file STL

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

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

Salvataggio come STL

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

Per controllare l’output, usa StlSaveOptions:

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

Considerazioni STL

  • I file STL contengono solo geometria triangolata. Materiali, texture e gerarchia della scena vengono persi durante l’esportazione.
  • Il STL binario è notevolmente più piccolo rispetto al STL ASCII per modelli di grandi dimensioni.
  • STL è il formato preferito quando il target è una stampante 3D o un software slicer.

glTF: Formato di Trasmissione GL

glTF è un formato moderno progettato per la trasmissione e il caricamento efficienti di contenuti 3D, in particolare sul web e nelle applicazioni in tempo reale. Supporta materiali PBR, gerarchie della scena e animazioni.

Caricamento file glTF

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

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

Salvataggio come glTF

Il salvataggio di base utilizza l’estensione del file per determinare il formato:

scene.save("output.gltf");

Per un controllo dettagliato, usa GltfSaveOptions:

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

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

Dettagli di GltfSaveOptions

MetodoScopo
setFlipCoordinateSystem(boolean)Capovolgi l’asse del sistema di coordinate durante l’esportazione. Utile quando si converte da Y-up a Z-up o viceversa.
setPrettyPrint(boolean)Formatta il JSON di output con rientro per una migliore leggibilità. Imposta su false per una dimensione del file più piccola in produzione.

Casi d’uso di glTF

  • Visualizzatori 3D basati sul web (three.js, Babylon.js).
  • Applicazioni in tempo reale e motori di gioco.
  • Mantenere le definizioni dei materiali PBR tra gli strumenti.

FBX: Filmbox (Solo importazione)

FBX è un formato proprietario di Autodesk ampiamente utilizzato nello sviluppo di giochi e nella creazione di contenuti digitali. Supporta gerarchie di scena ricche, materiali e animazioni. Aspose.3D FOSS per Java supporta FBX per solo import – l’esportazione in FBX non è disponibile.

Caricamento dei file FBX

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

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

Conversione di FBX in altri formati

Poiché l’esportazione FBX non è supportata, converti le scene FBX importate in glTF, GLB, OBJ o STL:

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

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

Casi d’uso di FBX

  • Importazione di asset dagli strumenti Autodesk (Maya, 3ds Max) e conversione in altri formati.
  • Caricamento di personaggi riggati e scene animate per la riesportazione in glTF/GLB.

Conversione batch

Un flusso di lavoro comune consiste nel convertire un’intera directory di file da un formato all’altro. Ecco un modello per la conversione batch:

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

Questo carica ogni .obj file in una directory, converte ciascuno in glTF con output formattato in modo leggibile e salva i risultati. Puoi adattare questo schema per qualsiasi combinazione di formato di origine e destinazione.

Riferimento per la conversione tra formati

La tabella seguente mostra cosa aspettarsi durante la conversione tra formati.

DaAGeometriaMaterialiGerarchiaNote
OBJSTLPreservatoPersoN/ASTL non ha supporto per i materiali
OBJglTF/GLBPreservatoConvertito a PBRPiattoMateriali MTL mappati dove possibile
STLOBJPreservatoNessunoN/ANessun materiale nella sorgente
STLglTF/GLBPreservatoPredefinitoPiattoMateriale predefinito applicato
glTFOBJPreservatoSemplificatoAppiattitoDa PBR a materiale di base
glTFSTLPreservatoPersoAppiattitoSolo geometria
FBXOBJPreservatoSemplificatoAppiattitoSemplificazione del materiale
FBXSTLPreservatoPersoAppiattitoSolo geometria
FBXglTF/GLBPreservatoConvertito a PBRPreservatoBuona fedeltà

Linee guida generali per la conversione

  • Geometria viene sempre preservata in tutte le coppie di formati.
  • Materiali sopravvive meglio tra glTF e FBX, che entrambi supportano modelli di materiale ricchi. La conversione in STL elimina sempre i materiali. La conversione in OBJ semplifica i materiali al modello MTL di base.
  • Gerarchia della scena viene preservata tra glTF e FBX. OBJ e STL producono strutture piatte.

Mettere tutto insieme

Ecco un esempio completo che carica un file OBJ, ispeziona i suoi nodi e lo esporta sia in glTF che in 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.");
    }
}

Aspose.3D FOSS for Java ti offre un’API coerente su più formati. I punti chiave:

  • OBJ – scambio di mesh semplice con materiali di base.
  • STL – formato solo geometria per pipeline di stampa 3D.
  • glTF / GLB – formato moderno compatibile PBR per uso web e in tempo reale. Usa GltfSaveOptions con setContentType(FileContentType.BINARY) per l’output GLB.
  • FBX – solo importazione; formato ricco per caricare asset da motori di gioco e strumenti DCC.

Usa classi di opzioni di caricamento e salvataggio specifiche per il formato (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) quando hai bisogno di un controllo dettagliato sul processo di importazione o esportazione.

Per maggiori dettagli, visita il Aspose.3D documentation oppure sfoglia il codice sorgente su GitHub.