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.
| Formato | Estensione | Importa | Esporta | Supporto materiale | Gerarchia della scena |
|---|---|---|---|---|---|
| OBJ | .obj | Sì | Sì | Base (file MTL) | Piatto |
| STL | .stl | Sì | Sì | Nessuno | Piatto |
| glTF 2.0 | .gltf | Sì | Sì | PBR | Completo |
| GLB | .glb | Sì | Sì | PBR | Completo |
| FBX | .fbx | Sì | No | Ricco | Completo |
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
| Metodo | Scopo |
|---|---|
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.
| Da | A | Geometria | Materiali | Gerarchia | Note |
|---|---|---|---|---|---|
| OBJ | STL | Preservato | Perso | N/A | STL non ha supporto per i materiali |
| OBJ | glTF/GLB | Preservato | Convertito a PBR | Piatto | Materiali MTL mappati dove possibile |
| STL | OBJ | Preservato | Nessuno | N/A | Nessun materiale nella sorgente |
| STL | glTF/GLB | Preservato | Predefinito | Piatto | Materiale predefinito applicato |
| glTF | OBJ | Preservato | Semplificato | Appiattito | Da PBR a materiale di base |
| glTF | STL | Preservato | Perso | Appiattito | Solo geometria |
| FBX | OBJ | Preservato | Semplificato | Appiattito | Semplificazione del materiale |
| FBX | STL | Preservato | Perso | Appiattito | Solo geometria |
| FBX | glTF/GLB | Preservato | Convertito a PBR | Preservato | Buona 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.");
}
}
Riepilogo
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
GltfSaveOptionsconsetContentType(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.