Suntem încântați să anunțăm disponibilitatea de 3D FOSS pentru Java - o bibliotecă gratuită, cu sursa deschisă pentru a lucra cu formate de fișiere 3D în aplicațiile Java. Construit ca o soluție pură Java fără dependențe native, biblioteca funcționează pe Java 21 și mai târziu, făcând accesibil la un spectru larg de proiecte și medii.

Acest post trece prin ceea ce biblioteca oferă, cum să înceapă și unde să meargă de aici.

Ce este Aspose.3D FOSS pentru Java?

Aspose.3D FOSS pentru Java este o bibliotecă de prelucrare a fișierelor 3D ușoară publicată în cadrul programului. Licență MIT. oferă o API de scenă-graph care vă permite să încărcați, inspectați și transformați modele 3D în mai multe formate utilizate pe scară largă. bibliotecă este scrisă complet în Java și nu necesită binare native exterioare sau configurații specifice platformei.

Codul de sursa este disponibil pe GitHub: WEB WEB www.github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Principalele evidențe

  • Java pură - nici JNI, nici biblioteci native, nu restrictii platforme.
  • Java 21+ în România compatibilă .
  • Licențiat - utilizarea în proiecte personale, comerciale sau proprietare fără restricții.
  • Arhitectura scenelor grafice - un copac familiar de noduri, mesele, camere și materiale.
  • Suport multiformate - citiți și scrieți fișierele OBJ, STL, glTF 2.0 și GLB; citiţi fișiere FBX.

Începe rapid

Instalarea Maven

Adăugați următoarea dependență la dvs. pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Prima ta conversie

Cel mai simplu caz de utilizare este încărcarea unui fișier 3D într-un format și salvarea acestuia în altul. Aici este o conversie cu două linii de la OBJ la 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");
    }
}

În acest caz, Scene Cursul este punctul de intrare central.Call Scene.fromFile() cu un traseu de fișier pentru a încărca un model, apoi chemați save() cu calea țintă. biblioteca inferează formatul din extinderea fișierului.

Crearea unei scene de la Scratch

De asemenea, puteți construi scenele programat:

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

Aceasta creează o nouă scenă, adaugă un nod de copil numit “Box” sub rădăcină și îl poziționează în coordonate (1, 2, 3), exportând rezultatul ca fișier glTF.

Încărcare cu opțiuni specifice formatului

Atunci când aveți nevoie de un control mai bun asupra procesului de încărcare, fiecare format oferă o clasă dedicată a opțiunilor. De exemplu, încrucirea unui fișier STL cu opții explicite:

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

În acest caz, Scene.fromFile() Metoda statisă acceptă oricare dintre tipurile de opțiuni de încărcare: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,sau FbxLoadOptions.

Călătoria pe scenă grafică

Odată ce o scenă este încărcată, puteți merge pe copacul nodului pentru a inspecta sau modifica conținutul său:

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

Acest model este util pentru debugging, generarea de rapoarte despre conținutul modelului sau modificarea selectivă a părților unei scene înainte de reexportare.

Aplicați transformări

Poziționarea nodurilor în spațiul 3D se face prin intermediul Transform Obiectul pe fiecare 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");
    }
}

Transformele urmează modelul standard de moștenire părinte-copil: poziția spațială a unui copil este combinația transformării sale locale și toți strămoșii se transformă până la rădăcină.

Ce este inclus

Biblioteca va avea o serie de capacitati concepute in jurul modelului 3D Scene-Graph.

Scenă grafică

Graficul de scenă este backbone-ul API. Fiecare fișier 3D este reprezentat ca o structură copac:

ClasăRolul
SceneContainere de nivel superior; rădăcina graficului scenei
NodeO poziție numită în copac; ține transformări și noduri de copil
EntityBaza abstractă pentru obiectele vizuale atașate la noduri
MeshGeometrie poligonală - verticale, fețe, normale
CameraDefiniția camerelor virtuale
TransformTraducere locală, rotație și scară pentru un nod
GlobalTransformTransformarea spaţiului global

Materiale

Biblioteca oferă un model de material PBR (Rendering bazat fizic):

  • PbrMaterial - material de renderare bazat pe fizică cu albedo, metalicitate, rigiditate și transparență.Aceasta este singura clasă de materiale concrete disponibilă în ediția Java.

Utilități matematice

În acest caz, com.aspose.threed Pachetul include elementele matematice primitive esențiale:

  • Vectorul 3 - vector de 3 componente pentru poziții, direcții și culori.
  • Matrix 4 - 4x4 matrică de transformare.
  • Cuaternă reprezentarea rotaţiei.
  • BoundingBox - cutia de legătură axată pentru cereri spațiale.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Încărcați și salvați opțiuni

Fiecare format are clase de opțiuni dedicate care vă permit să controlați comportamentul importului și exportului:

FormatulOpțiuni de încărcareSalvați opțiuni
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GNL / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(nu este decât importul)

De exemplu, pentru a exporta glTF cu JSON bine imprimat și un sistem de coordonate flipped:

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

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

Formate susținute

Tabela de mai jos rezumă formatele pe care Aspose.3D FOSS pentru Java le poate citi și scrie.

FormatulextindereImportulExportulNotă
OBJ.objDaDaCu materiale MTL
STL.stlDaDaBinare + ASCII
GST 2.0.gltfDaDaFormatul JSON
GLB.glbDaDaBinare glTF prin GltfSaveOptions
FBX.fbxDaNuImportul numai

OBJ, STL, glTF și GLB susțin atât încărcarea cât și economisirea. FBX este suportat pentru import numai.

Ghidul de selecție format

Alegerea formatului potrivit depinde de utilizarea ta:

  • OBJ este ideal atunci când aveți nevoie de compatibilitate maximă între instrumente 3D. Aproape fiecare aplicație de modelare poate citi și scrie OBJ. Funcționează bine pentru schimbul de date mesh, dar nu aduce decât informații materiale de bază prin intermediul fișierelor companiei MTL.
  • STL este formatul de alegere pentru fluxurile de lucru 3D prinț. stocă geometria triangulară crudă fără materiale sau ierarhie scenă, care este exact ceea ce așteaptă software-ul slider. Dacă pipeline se termină la un imprimant 3d, STL este alegerea simplă.
  • Glată este standardul modern pentru web și 3D în timp real. susține materiale PBR, ierarhie de scenă completă și este conceput pentru transmitere eficientă. Utilizați glTF atunci când construiți vizualizatori pe internet, lucrați cu three.js sau Babylon.JS, sau ține orice pipeline de rendering în timpul real.
  • FBX este profund integrat în dezvoltarea jocurilor și fluxurile de lucru pentru crearea conținutului digital. susține date bogate pe scenă, inclusiv ierarhie și materiale. Aspose.3D FOSS pentru Java susțin FBX Importul numai - utilizează pentru a încărca activele FBX și să le converteze în alte formate.

Limite cunoscute

Este important să se ia în considerare că Scene.render() este Nu susţinută în ediţia FOSS. numind această metodă va arunca un UnsupportedOperationException.Biblioteca este concepută pentru procesarea 3D bazată pe fișiere - încărcarea, manipularea, transformarea și salvare a modelelor - în loc de renderizarea într-un display în timp real.

Sursă deschisă și licență

Aspose.3D FOSS pentru Java este lansat sub Licența MIT.Aceasta înseamnă că sunteți liberi de:

  • Foloseste biblioteca in aplicații comerciale și proprietare.
  • Modificați codul de sursă pentru a vă adapta nevoilor.
  • Distribuiți biblioteca ca parte a propriului software.

Nu există taxe de royalty, nu există limite de utilizare și nici cerințe de atribuire în afara celor specificate de licența MIT.

Codul de sursă complet este găzduit pe GitHub, iar contribuțiile sunt binevenite: WEB WEB www.github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Cerințe sistemice

CerinţăDetalii
Versiune Java21 or later
DependențăNu există (Java pură)
PlatformeOrice platformă care rulează un JVM
Construiește instrumentulMaven (recomandat pentru a face)

să înceapă

Iată câteva resurse care vă vor ajuta să mergeți și să rulați:

  • Documentare - ghiduri complete și pași de mers API sunt disponibile pe Site-ul de documentare Aspose.3D.
  • Baza de cunoaştere - cum să scrie articole și sfaturi de rezolvare a problemelor în Cuvânt cheie 3D KB.
  • Referință API - referinţă de clasă şi metodă detaliată la Aspose.3D API referință.
  • Codul sursă - navigati si contribuiti la GitHub.
  • Maven Centrul - pachetul este publicat ca org.aspose:aspose-3d-foss:26.5.0 În centrul Maven.

cazuri de utilizare comună

Iată câteva scenarii practice în care Aspose.3D FOSS pentru Java se potrivește bine:

Formatul de transformare a pipelinei

Multe echipe primesc active 3D într-un format, dar le au nevoie în altul. Un echipă de design poate lucra în FBX, în timp ce echipa web are nevoie de glTF. Biblioteca vă permite să construiți pipelini de conversie automat:

// 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

Înainte de a integra un activ 3D în aplicația dvs., este posibil să doriți să validezi conținutul acestuia - verificând numărul de noduri, verificat geometria sau confirmând că elementele așteptate sunt prezente:

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

Adunarea pe scenă

Puteți încărca mai multe modele și le puteți combina într-o singură scenă:

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

Ce este următorul

În următoarele postări, vom acoperi:

  • O scufundare profundă în caracteristicile cheie ale API-ului de scenă, materialelor și utilităților matematice.
  • Un ghid practic pentru a lucra cu fiecare format 3D susținut - OBJ, STL, glTF și FBX - inclusiv opțiuni de încărcare / salvare și modele de conversie batch.

Rămâneți încurajat și simțiți-vă liber să explorați biblioteca și să vă împărtășiți feedback-ul pe GitHub.