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:

ClassificazioneIl ruolo
SceneContenitore di alto livello; la radice del grafico della scena
NodeUna posizione nominata nell’albero; detiene trasformazioni e nodi infantili
EntityBase abstrata per oggetti visivi collegati ai nodi
MeshGeometria poligonal - verticali, facce, normali
CameraDefinizione della fotocamera virtuale
TransformTraduzione locale, rotazione e scala per un nodo
GlobalTransformIl 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:

formatiOpzioni di caricoSalva le opzioni
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GTTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(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.

formatiestensioneImportazioneesportazioneNotizie
OBJ.objCon materiali MTL
STL.stlIl binario + ASCII
Il GTTF 2.0.gltfIl formato JSON
GLB.glbIl gioco di GltfSaveOptions
FBX.fbxNo nonImportare 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

RequisitiDettagli
Versione Java21 or later
dipendenzaNessun (per il Java)
PiattaformeQualsiasi piattaforma che esegue un JVM
Costruire strumentoIl 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.0 Il 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.