Siamo entusiasti di annunciare la disponibilità di Aspose.3D FOSS for Java – una libreria gratuita, open-source per lavorare con formati di file 3D nelle applicazioni Java. Realizzata come una soluzione pura Java senza dipendenze native, la libreria funziona su Java 21 e versioni successive, rendendola accessibile a un’ampia gamma di progetti e ambienti.
Questo post illustra cosa offre la libreria, come iniziare e dove andare da qui.
Che cos’è Aspose.3D FOSS per Java?
Aspose.3D FOSS for Java è una libreria leggera per l’elaborazione di file 3D pubblicata sotto la MIT license. Fornisce un’API scene-graph che consente di caricare, ispezionare, trasformare e salvare modelli 3D in diversi formati ampiamente utilizzati. La libreria è interamente scritta in Java e non richiede binari nativi esterni né configurazioni specifiche per la piattaforma.
Il codice sorgente è disponibile su GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Punti salienti
- Puro Java – nessun JNI, nessuna libreria nativa, nessuna restrizione di piattaforma.
- Java 21+ compatibile.
- con licenza MIT – usalo in progetti personali, commerciali o proprietari senza restrizioni.
- Architettura a grafo di scena – un albero familiare di nodi, mesh, telecamere e materiali.
- Supporto multi-formato – leggere e scrivere file OBJ, STL, glTF 2.0 e GLB; leggere file FBX.
Avvio rapido
Installazione di Maven
Aggiungi la seguente dipendenza al tuo pom.xml:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
La tua prima conversione
Il caso d’uso più semplice consiste nel caricare un file 3D in un formato e salvarlo in un altro. Ecco una conversione in due righe da OBJ a STL:
import com.aspose.threed.*;
public class QuickConvert {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("cube.obj");
scene.save("output.stl");
}
}
Il Scene class è il punto di ingresso centrale. Chiama Scene.fromFile() con un percorso file per caricare un modello, quindi chiama save() con il percorso di destinazione. La libreria deduce il formato dall’estensione del file.
Creare una scena da zero
Puoi anche costruire scene programmaticamente:
import com.aspose.threed.*;
public class BuildScene {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("Box");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3);
scene.save("scene.gltf");
}
}
Questo crea una nuova scena, aggiunge un nodo figlio chiamato “Box” sotto la radice, lo posiziona alle coordinate (1, 2, 3) e esporta il risultato come file glTF.
Caricamento con Opzioni Specifiche del Formato
Quando hai bisogno di un controllo più fine sul processo di caricamento, ogni formato fornisce una classe di opzioni dedicata. Ad esempio, caricare un file STL con opzioni esplicite:
import com.aspose.threed.*;
public class LoadWithOptions {
public static void main(String[] args) throws Exception {
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
// Inspect the loaded scene
System.out.println("Root children: "
+ scene.getRootNode().getChildNodes().size());
// Re-export as OBJ
scene.save("part.obj");
}
}
Il Scene.fromFile() static method accetta uno qualsiasi dei tipi di opzione di caricamento: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, o FbxLoadOptions.
Attraversare il Grafo della Scena
Una volta che una scena è caricata, puoi percorrere l’albero dei nodi per ispezionare o modificare i suoi contenuti:
import com.aspose.threed.*;
public class TraverseScene {
public static void main(String[] args) throws Exception {
Scene scene = Scene.fromFile("model.gltf");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println("Node: " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: " + t.getTranslation());
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println(" Vertices: "
+ mesh.getControlPoints().size());
}
}
}
}
Questo schema è utile per il debug, per generare report sul contenuto del modello o per modificare selettivamente parti di una scena prima di riesportarla.
Applicare le Trasformazioni
Il posizionamento dei nodi nello spazio 3D avviene tramite il Transform object su ciascuno Node:
import com.aspose.threed.*;
public class TransformExample {
public static void main(String[] args) throws Exception {
Scene scene = new Scene();
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
child.getTransform().setScale(2, 2, 2);
// Child's world position is (15, 0, 0) due to
// parent-child transform inheritance
scene.save("transformed.gltf");
}
}
Le trasformazioni seguono il modello standard di ereditarietà genitore‑figlio: la posizione nello spazio mondiale di un figlio è la combinazione della sua trasformazione locale e di tutte le trasformazioni degli antenati fino alla radice.
Cosa è incluso
La libreria è fornita con un set mirato di funzionalità progettate attorno al modello di grafo della scena 3D.
Grafo della scena
Il grafo della scena è la spina dorsale dell’API. Ogni file 3D è rappresentato come una struttura ad albero:
| Classe | Ruolo |
|---|---|
Scene | Contenitore di livello superiore; la radice del grafo della scena |
Node | Una posizione nominata nell’albero; contiene trasformazioni e nodi figli |
Entity | Base astratta per oggetti visivi collegati ai nodi |
Mesh | Geometria poligonale – vertici, facce, normali |
Camera | Definizione della fotocamera virtuale |
Transform | Traslazione, rotazione e scala locali per un nodo |
GlobalTransform | Trasformazione nello spazio mondiale calcolata |
Materiali
La libreria fornisce un modello di materiale PBR (Physically Based Rendering):
- PbrMaterial – materiale di rendering basato fisicamente con albedo, metallicità, rugosità, colore emissivo e trasparenza. Questo è l’unico classe di materiale concreta disponibile nell’edizione Java.
Utility Matematiche
Il com.aspose.threed Il pacchetto include primitive matematiche essenziali:
- Vector3 – Vettore a 3 componenti per posizioni, direzioni e colori.
- Matrix4 – Matrice di trasformazione 4x4.
- Quaternion – Rappresentazione della rotazione.
- BoundingBox – Bounding box allineato agli assi per query spaziali.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
Opzioni di Caricamento e Salvataggio
Ogni formato dispone di classi di opzioni dedicate che consentono di controllare il comportamento di importazione ed esportazione:
| Formato | Carica opzioni | Salva opzioni |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (solo importazione) |
Ad esempio, per esportare glTF con JSON formattato in modo leggibile e un sistema di coordinate invertito:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Formati supportati
La tabella seguente riassume i formati che Aspose.3D FOSS per Java può leggere e scrivere.
| Formato | Estensione | Importa | Esporta | Note |
|---|---|---|---|---|
| OBJ | .obj | Sì | Sì | Con materiali MTL |
| STL | .stl | Sì | Sì | Binario + ASCII |
| glTF 2.0 | .gltf | Sì | Sì | formato JSON |
| GLB | .glb | Sì | Sì | glTF binario tramite GltfSaveOptions |
| FBX | .fbx | Sì | No | Solo importazione |
OBJ, STL, glTF e GLB supportano sia il caricamento che il salvataggio. FBX è supportato solo per l’importazione.
Guida alla selezione del formato
Scegliere il formato giusto dipende dal tuo caso d’uso:
- OBJ è ideale quando hai bisogno della massima compatibilità tra gli strumenti 3D. Quasi tutte le applicazioni di modellazione possono leggere e scrivere OBJ. Funziona bene per lo scambio di dati mesh, ma trasporta solo informazioni di base sui materiali tramite i file MTL associati.
- STL è il formato preferito per i flussi di lavoro di stampa 3D. Memorizza la geometria triangolata grezza senza materiali né gerarchia della scena, esattamente ciò che il software di slicing si aspetta. Se il tuo flusso termina su una stampante 3D, STL è la scelta più semplice.
- glTF è lo standard moderno per il web e la 3D in tempo reale. Supporta materiali PBR, gerarchie di scena complete ed è progettato per una trasmissione efficiente. Usa glTF quando costruisci visualizzatori basati sul web, lavori con three.js o Babylon.js, o miri a qualsiasi pipeline di rendering in tempo reale.
- FBX è profondamente integrato nei flussi di lavoro di sviluppo di giochi e creazione di contenuti digitali. Supporta dati di scena ricchi, incluse gerarchie e materiali. Aspose.3D FOSS per Java supporta FBX solo importazione – usalo per caricare asset FBX e convertirli in altri formati.
Limitazioni note
È importante notare che Scene.render() è non supportato nella versione FOSS. Chiamare questo metodo genererà un UnsupportedOperationException. La libreria è progettata per l’elaborazione 3D basata su file – caricamento, manipolazione, trasformazione e salvataggio dei modelli – piuttosto che per il rendering in tempo reale su un display.
Open Source e Licenze
Aspose.3D FOSS per Java è rilasciato sotto la MIT License. Questo significa che sei libero di:
- Utilizzare la libreria in applicazioni commerciali e proprietarie.
- Modificare il codice sorgente per adattarlo alle tue esigenze.
- Distribuisci la libreria come parte del tuo software.
Non ci sono commissioni di royalty, limiti di utilizzo né requisiti di attribuzione oltre a quanto specificato dalla licenza MIT.
Il codice sorgente completo è ospitato su GitHub e i contributi sono benvenuti: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Requisiti di sistema
| Requisito | Dettaglio |
|---|---|
| Java versione | 21 or later |
| Dipendenze | Nessuna (puro Java) |
| Piattaforme | Qualsiasi piattaforma che esegue una JVM |
| Strumento di build | Maven (consigliato) |
Iniziare
Ecco le risorse per aiutarti a partire:
- Documentazione – guide complete e walkthrough delle API sono disponibili sul Aspose.3D sito di documentazione.
- Base di conoscenza – articoli pratici su come fare e suggerimenti per la risoluzione dei problemi nella Aspose.3D KB.
- Riferimento API – riferimento dettagliato a classi e metodi su Aspose.3D Riferimento API.
- Codice sorgente – sfoglia e contribuisci su GitHub.
- Maven Central – il pacchetto è pubblicato come
com.aspose:aspose-3d-fosssu Maven Central.
Casi d’uso comuni
Ecco alcuni scenari pratici in cui Aspose.3D FOSS per Java si adatta bene:
Pipeline di conversione dei formati
Molti team ricevono asset 3D in un formato ma ne hanno bisogno in un altro. Un team di design potrebbe lavorare in FBX mentre il team web necessita di glTF. La libreria consente di creare pipeline di conversione automatizzate:
// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("asset.glb", opts);
3D Model Inspection and Validation
Prima di integrare un asset 3D nella tua applicazione, potresti voler convalidare il suo contenuto – controllare il numero di nodi, verificare la geometria o confermare che gli elementi previsti siano presenti:
Scene scene = Scene.fromFile("model.obj");
int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);
for (Node child : scene.getRootNode().getChildNodes()) {
if (child.getEntity() instanceof Mesh) {
Mesh mesh = (Mesh) child.getEntity();
System.out.println(child.getName() + ": "
+ mesh.getControlPoints().size() + " vertices");
}
}
Assemblaggio della scena
Puoi caricare più modelli e combinarli in un’unica scena:
Scene scene = new Scene();
Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");
// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
scene.getRootNode().getChildNodes().add(child);
}
scene.save("assembled.gltf");
Cosa segue
Nei prossimi post, tratteremo:
- Un’analisi approfondita delle funzionalità chiave dell’API del grafo della scena, dei materiali e delle utility matematiche.
- Una guida pratica per lavorare con ciascun formato 3D supportato – OBJ, STL, glTF e FBX – includendo le opzioni di caricamento/salvataggio e i modelli di conversione batch.
Rimanete sintonizzati e sentitevi liberi di esplorare la libreria e condividere il vostro feedback su GitHub.