Vi glæder os til at meddele, at der er adgang til 3D FOSS til Java - en gratis, open-source bibliotek til at arbejde med 3D filformater i Java applikationer. Bygget som en ren Java løsning uden indfødte afhængigheder, biblioteket kører på Java 21 og senere, hvilket gør det tilgængeligt for et bredt spektrum af projekter og miljøer.

Denne post går gennem, hvad biblioteket tilbyder, hvordan man starter og hvor man skal gå fra her.

Hvad er 3D FOSS for Java?

Aspose.3D FOSS for Java er en let 3D-filbehandlingsbibliotek, der er udgivet under Mit licens. Det giver en scene-grafik API, der gør det muligt at oplade, inspicere, transformere og gemme 3D modeller over flere almindeligt anvendte formater. biblioteket er fuldt skrevet i Java og kræver ingen eksterne indfødte binære eller platformspecifik konfiguration.

Kildekoden er tilgængelig på GitHub: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Nøglehøjtider

  • Ren Java - ingen JNI, ingen indfødte biblioteker, ikke nogen platformbegrænsninger.
  • Java 21+ af Det er kompatibelt.
  • MIT licenseret - Brug det i personlige, kommercielle eller ejendomsprojekter uden begrænsninger.
  • Scene-graf arkitektur - et kendt træ af knuder, meser, kameraer og materialer.
  • Multi-format support - Læs og skriv OBJ, STL, glTF 2.0 og GLB filer; læs FBX filerne.

Hurtig start

Maven installation

Tilføj følgende afhængighed til din pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Din første konvertering

Den nemmeste anvendelsesvej er at oplade en 3D-fil i et format og gemme den i det andet. Her er en to-line konvertering fra OBJ til 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");
    }
}

Den Scene Klassen er det centrale indgangspunkt. opkald Scene.fromFile() med en filvej til at oplade et model, så kalde det save() med målvejen. biblioteket indfanger formatet fra filudvidelsen.

Skab en scene fra Scratch

Du kan også lave scener programmeret:

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

Dette skaber en ny scene, tilføjer et barnekode kaldet “Box” under rødden, placerer det i koordinater (1, 2, 3), og eksporterer resultatet som en glTF-fil.

Opladning med format-specifikke muligheder

Når du har brug for bedre kontrol over loading processen, giver hvert format en dedikeret opsætning klasse. For eksempel, ladning af en STL fil med eksplicite muligheder:

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

Den Scene.fromFile() Den statiske metode accepterer en af de lastoptionstyper: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,eller FbxLoadOptions.

Overvej scenen graf

Når en scene er opladt, kan du gå i knudepræven for at inspicere eller ændre dens indhold:

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

Denne mønster er nyttig til debugging, generering af rapporter om modelindhold eller selektivt ændring af dele af en scene før re-eksport.

Anvendelse af transformation

Positionering af noder i 3D-rummet sker gennem Transform Objekt på hver 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");
    }
}

Transformation følger den standard moders-barns arvsmodel: et barns verdensrumposition er kombinationen af dens lokale transformation og alle forfædre transformerer op til rødden.

Hvad er inkluderet

Biblioteket skibe med en fokuseret sæt af kapaciteter designet omkring 3D scene-graf model.

Scene af grafen

Scene grafen er bagkanten af API. Hver 3D-fil repræsenteres som en træstruktur:

KlasserRollen
SceneTop niveau container; rødden af scenen grafen
NodeEn navngivet position i træet; holder transformationer og børns knuder
EntityAbstrakt basis for visuelle objekter, der er knyttet til knuder
MeshPolygonal geometri - vertikale, ansigter og normale
CameraVirtuelle kamera definitioner
TransformLokalt oversættelse, rotering og skala for en node
GlobalTransformComputeret verdens-rum transformation

Materialer

Biblioteket giver en PBR (Fysisk Based Rendering) materiale model:

  • PbrMaterial - fysisk baseret rendering materiale med albedo, metalness, grusomhed, emissionsfarve og gennemsigtighed. Dette er den eneste konkrete materialer klasse tilgængelig i Java-udgaven.

Matematisk nyttighed

Den com.aspose.threed Pakken indeholder essentielle matematiske primitiver:

  • Vektor 3 - 3-komponent vektor for positioner, retninger og farver.
  • Matrix 4 4x4 transformation matrix.
  • Kvartal - Den roterende repræsentation.
  • BoundingBox - Axis-alignet bunden boks til rumspørgsmål.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Optage og gem optioner

Hver format har dedikeret valgklasser, der giver dig mulighed for at kontrollere import og eksport adfærd:

FormateretOptioner til opladningBeskyttelse af muligheder
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(kun på importen)

For eksempel, at eksportere glTF med en prægtig udskrivet JSON og et flydende koordinatsystem:

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

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

Støtte formater

Følgende tabel samler de formater, som Aspose.3D FOSS for Java kan læse og skrive.

FormateretUdvidelseImportenEksportenNoter
OBJ.objJa jaJa jaMed MTL-materialer
STL.stlJa jaJa jaBinar + ASCII
GF 2.0.gltfJa jaJa jaJSON format
GLB.glbJa jaJa jaBinær glTF via GltfSaveOptions
FBX.fbxJa jaIkkeKun import

OBJ, STL, glTF og GLB understøtter både opladning og besparelse. FBX er kun understreget for import.

Formater udvælgelsesguide

Valget af det rigtige format er afhængig af din brug:

  • OBJ Det er ideelt, når du har brug for maksimal kompatibilitet over 3D-værktøjer. Næsten enhver modeling applikation kan læse og skrive OBJ. Det fungerer godt til mesh data udveksling men bærer kun grundlæggende materiale oplysninger gennem medarbejder MTL filer.
  • STL Det lagrer rå trianguleret geometri uden materialer eller scene hierarki, hvilket er præcis hvad slicer software forventer. Hvis din pipeline ender på en 3D printer, STL er det enkle valg.
  • Gldtf er den moderne standard for web og real-time 3D. Det understøtter PBR materialer, fuld scene hierarkier, og er designet til effektiv transmission. Brug glTF når opbygge webbaserede seere, arbejde med three.js eller Babylon.js, eller målrette enhver realtid rendering pipeline.
  • FBX er dybt integreret i spiludvikling og digitale indhold skabelse arbejdstrømme. Det understøtter rig scenen data herunder hierarkier og materialer. Aspose.3D FOSS for Java støtter FBX Kun import - Brug det til at oplade FBX-forretninger og konvertere dem til andre formater.

Kendte begrænsninger

Det er vigtigt at bemærke, at Scene.render() er Ikke støttet I den FOSS-udgave. kaldet denne metode vil kaste en UnsupportedOperationException.Biblioteket er designet til filbaseret 3D-behandling - opladning, manipulation, transformation og sparing modeller - i stedet for at renderer en display i realtid.

Åbent kilde og licensering

Aspose.3D FOSS for Java er udgivet under Mit licens.Det betyder, at du er fri til:

  • Brug biblioteket i kommercielle og ejendomsmæssige applikationer.
  • Ændre kildekoden for at passe dine behov.
  • Uddyb biblioteket som en del af din egen software.

Der er ingen royalty gebyrer, ingen brugsbegrænsninger og ingen tildelingsforespørgsler ud over hvad MIT-licens angiver.

Den fulde kilde kod er hoste på GitHub, og bidrag er velkomne: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Systemkrav

Kravetdetaljer
Java versioner21 or later
afhængighedIngen (Pure Java)
PlattformerEnhver platform, der kører en JVM
Bygge værktøjMaven (foreslået)

At blive startet

Her er de ressourcer, der hjælper dig med at komme op og køre:

  • Dokumentation - omfattende guider og API-gangsrejser er tilgængelige på Aspose.3D dokumentation hjemmeside.
  • Kendskabsbase - praktiske hvordan-til artikler og problemløsning tips i den Sæson 3D KB.
  • Færdeskab Reference - detaljeret klassificering og metode reference til Aspose.3D API Reference.
  • Kilde kode - browsere og bidrage til GitHub.
  • Maven Centrale - pakken er offentliggjort som com.aspose:aspose-3d-foss På Maven Central.

Vanlige brugssager

Her er nogle praktiske scenarier, hvor Aspose.3D FOSS for Java passer godt:

Formatering af konverteringsrør

Mange hold modtager 3D-forretninger i et format, men har brug for dem i en anden. Et designteam kan arbejde på FBX, mens webteamet behøver glTF. Biblioteket giver dig mulighed for at opbygge automatiserede konverteringsrør:

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

Før du integrerer en 3D-forretning i din ansøgning, vil du muligvis validere dens indhold - tjekk nodeberegninger, verifikere geometri eller bekræfte, at forventede elementer er til stede:

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

Sænesamling

Du kan oplade flere modeller og kombinere dem i en enkelt scene:

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

Hvad er næste

I de kommende indlæg vil vi dække:

  • En dyb dykke ind i de nøglefunktioner af scenen-graf API, materialer og matematiske værktøjer.
  • En praktisk vejledning til at arbejde med hvert støttet 3D-format - OBJ, STL, glTF og FBX - herunder optioner for last/save og batch konverteringsmønstre.

Vær fortrolig og føl dig fri til at udforske biblioteket og dele din feedback på GitHub.