Siamo lieti di annunciare la disponibilità di 3D FOSS per Java - una biblioteca gratuita, open source per lavorare con i formati di file 3D in applicazioni Java. Costruita come soluzione pura Java senza dipendenze native, la biblioteca funziona su Java 21 e successivamente, rendendola accessibile a un ampio spettro di progetti e ambienti.
Questo post passa attraverso ciò che la biblioteca offre, come iniziare e dove andare da qui.
Che cosa è il 3D FOSS per Java?
Aspose.3D FOSS per Java è una leggera biblioteca di elaborazione dei file 3D pubblicata sotto il Licenza di MIT.Fornisce un’API di grafica della scena che consente di caricare, controllare, trasformare e salvare i modelli 3D in diversi formati ampiamente utilizzati.La biblioteca è scritta interamente in Java e non richiede alcuna configurazione nativa esterna o specifica per la piattaforma.
Il codice di sorgente è disponibile su GitHub: WEB WEB Sito ufficiale: Aspose-3d-foss/Aspose.3D-FOSS-for-Java
Le principali evidenze
- Il Java puro - nessuna JNI, nessun libro nativo, non ci sono restrizioni sulla piattaforma.
- Il Java 21+ compatibile .
- Il MIT licenziato - utilizzarlo in progetti personali, commerciali o di proprietà senza restrizioni.
- Scenografo architettura - un albero familiare di nodi, messe, telecamere e materiali.
- Supporto multiformato - Leggi e scrivere i file OBJ, STL, glTF 2.0 e GLB; leggi i files FBX.
Rapido inizio
Maven Installazione
Aggiungi la seguente dipendenza al tuo pom.xml:
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>La tua prima conversione
Il caso più semplice di utilizzo è caricare un file 3D in uno formato e salvarlo in un altro. ecco una conversione a 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 La classe è il punto di ingresso centrale.Call Scene.fromFile() con un file path per caricare un modello, quindi chiamare save() La biblioteca infiera il formato dalla estensione del file.
Creare una scena da Scratch
Puoi anche creare 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 infantile chiamato “Box” sotto la radice, lo posiziona in coordinate (1, 2, 3), e esporta il risultato come file glTF.
Caricamento con opzioni specifiche per il formato
Quando hai bisogno di un controllo più completo sul processo di caricamento, ogni formato fornisce una classe di opzioni dedicata. ad esempio, caricare un file STL con opzione esplicita:
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() Il metodo statico accetta qualsiasi dei tipi di opzione carica: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,o FbxLoadOptions.
Passando il grafico della scena
Una volta caricata una scena, puoi camminare per l’albero nodo per controllare o modificare il suo contenuto:
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 modello è utile per la debugging, generare rapporti sui contenuti del modello o modificare selettivamente parti di una scena prima di riesportare.
Applicazione di trasformazioni
Posizionare i nodi nello spazio 3D viene fatto attraverso il Transform oggetto su ogni 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 eredità genitoriale-figlio: la posizione spaziale del bambino è la combinazione della sua trasformazione locale e tutti gli antenati si trasformeranno fino alla radice.
Cosa è incluso
La biblioteca ha una serie di capacità focalizzata progettata intorno al modello 3D scenografico.
Sceneggiatura Graph
Il grafico della scena è il backbone dell’API. Ogni file 3D è rappresentato come una struttura di un albero:
| Classificazione | Il ruolo |
|---|---|
Scene | Contenitore di alto livello; la radice del grafico della scena |
Node | Una posizione nominata nell’albero; detiene trasformazioni e nodi infantili |
Entity | Base abstrata per oggetti visivi collegati ai nodi |
Mesh | Geometria poligonal - verticali, facce, normali |
Camera | Definizione della fotocamera virtuale |
Transform | Traduzione locale, rotazione e scala per un nodo |
GlobalTransform | Il mondo-spazio trasformato |
Materiali
La biblioteca fornisce un modello materiale PBR (Rendering fisicamente basato):
- PbrMaterial - materiale di rendering fisicamente basato con albedo, metalezza, rigidità, colore emissivo e trasparenza.Questo è l’unica classe di materiali concreti disponibile nella versione Java.
Utilità di Matematica
Il com.aspose.threed Il pacchetto comprende i primiti matematici essenziali:
- Vector3 - 3 componenti vectori per posizioni, direzioni e colori.
- Matrix4 - 4x4 matrizza di trasformazione.
- Quattedrale La rappresentazione di rotazione.
- BoundingBox - box di confine allineato a assi per domande spaziali.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
Caricare e salvare opzioni
Ogni formato ha classi di opzioni dedicate che ti permettono di controllare il comportamento d’importazione e esportazioni:
| formati | Opzioni di carico | Salva le opzioni |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| GTTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | (solo per l’importazione) |
Ad esempio, per esportare glTF con JSON stampato e un sistema di coordinate flipped:
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.
| formati | estensione | Importazione | esportazione | Notizie |
|---|---|---|---|---|
| OBJ | .obj | Sì | Sì | Con materiali MTL |
| STL | .stl | Sì | Sì | Il binario + ASCII |
| Il GTTF 2.0 | .gltf | Sì | Sì | Il formato JSON |
| GLB | .glb | Sì | Sì | Il gioco di GltfSaveOptions |
| FBX | .fbx | Sì | No non | Importare solo |
OBJ, STL, glTF e GLB supportano sia il carico che lo spreco. FBX è supportato solo per l’importazione.
Guida di selezione formato
La scelta del formato giusto dipende dal tuo caso di utilizzo:
- OBJ è ideale quando hai bisogno di una massima compatibilità tra strumenti 3D. Quasi ogni applicazione di modelli può leggere e scrivere OBJ. Funziona bene per lo scambio dei dati mesh ma porta solo informazioni materiali basali attraverso i file MTL compagni.
- STL è il formato di scelta per i flussi di lavoro di stampa 3D. Stoccala geometria triangolare cruda senza materiali o gerarchie scene, che è esattamente ciò che il software slider si aspetta. Se la tua pipeline finisce con una stampante 3d, STL è l’opzione semplice.
- Il GTTF è lo standard moderno per web e 3D in tempo reale. supporta i materiali PBR, le gerarchie di scena completa, ed è progettato per la trasmissione efficiente. Utilizzare glTF quando si costruiscono visualizzatori basati sul web, lavorando con tre.js o Babylon.js, o mirare qualsiasi pipeline rendering in tempi reali.
- FBX è profondamente integrato nel lavoro di sviluppo del gioco e creazione dei contenuti digitali. supporta i ricchi dati scene tra cui gerarchie e materiali. Aspose.3D FOSS per Java supponde FBX importare solo - utilizza per caricare gli attivi FBX e convertitoli in altri formati.
Le limitazioni conosciute
È importante notare che Scene.render() è Non sostenuto in questa edizione di FOSS. chiamando questo metodo si lancerà un UnsupportedOperationException.La biblioteca è progettata per il trattamento 3D basato su file - caricamento, manipolazione, trasformazione e salvataggio di modelli - piuttosto che rendering in tempo reale a un display.
Open Source e Licenza
Aspose.3D FOSS per Java è rilasciato sotto il Licenza di MIT.Questo significa che sei libero di:
- Utilizzare la biblioteca in applicazioni commerciali e di proprietà.
- Modifica il codice sorgente per adattare le tue esigenze.
- Distribuisci la biblioteca come parte del tuo software.
Non ci sono tasse di royalty, nessun limite d’uso e nessuna richiesta di assegnazione al di là di ciò che la licenza MIT specifica.
Il codice sorgente completo è ospitato su GitHub, e le contribuzioni sono benvenute: WEB WEB Sito ufficiale: Aspose-3d-foss/Aspose.3D-FOSS-for-Java
Requisiti di sistema
| Requisiti | Dettagli |
|---|---|
| Versione Java | 21 or later |
| dipendenza | Nessun (per il Java) |
| Piattaforme | Qualsiasi piattaforma che esegue un JVM |
| Costruire strumento | Il Maven (Riscomandato) |
Avviare a
Ecco i mezzi per aiutarti a salire e correre:
- Documentazione - guide complesse e passeggiate API sono disponibili sul sito Sito web di documentazione Aspose.3D.
- Base di conoscenza - come pratico articoli e consigli di risoluzione dei problemi nel Il nuovo 3D KB.
- Il riferimento di API - una descrizione dettagliata della classe e del metodo di riferimento al Aspose.3D API di riferimento.
- Codice di sorgente - navigare e contribuire a GitHub.
- Il Maven Central Il pacchetto è pubblicato come
org.aspose:aspose-3d-foss:26.5.0Il centro di Maven.
Cassi di utilizzo comuni
Ecco alcuni scenari pratici in cui Aspose.3D FOSS per Java si adatta bene:
Formato di trasformazione Pipe
Molte squadre ricevono attività 3D in un formato ma le hanno bisogno in altro. Un team di progettazione potrebbe lavorare su FBX mentre il team web ha bisogno di glTF. La biblioteca ti consente di costruire tubi di conversione automatizzati:
// 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 attivo 3D nella tua applicazione, potresti voler valutare il suo contenuto - controllando i numeri dei nodi, verificando la geometria o confermando che gli elementi attesi sono 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");
}
}
Sceneggiatura Assemblea
Puoi caricare diversi modelli e combinarli in una sola 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 è il prossimo
Nei prossimi post, copriremo:
- Un profondo immersione nelle caratteristiche chiave dell’API di sceneggiatura, materiali e utilità matematiche.
- Un guida pratica per lavorare con ogni formato 3D supportato - OBJ, STL, glTF e FBX - comprese le opzioni di carico/salva e i modelli di conversione del pacch.
Rimanete alti e sentite liberi di esplorare la biblioteca e condividere il vostro feedback su GitHub.