Vi är glada att meddela tillgängligheten av Aspose.3D FOSS för Java - en fri, öppen källkod bibliotek för att arbeta med 3D-filer i Java applikationer. Byggd som en ren Java lösning utan inhemska beroende, kör biblioteket på Java 21 och senare, vilket gör det tillgängligt för ett brett utbud av projekt och miljöer.

Denna post går igenom vad biblioteket erbjuder, hur man börjar och var man ska gå från här.

Vad är Aspose.3D FOSS för Java?

Aspose.3D FOSS för Java är en lätt 3D-filer bearbetning bibliotek publicerad under MIT licens.Det ger en scen-graf API som låter dig ladda, inspektera, omvandla och spara 3D-modeller över flera allmänt använda format. biblioteket är helt skrivet i Java och kräver inga externa inhemska binärer eller plattformspecifika konfigurationer.

Källkoden finns på GitHub: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-för Java

Nyckelhögtalar

  • Ren Java - ingen JNI, inga inhemska bibliotek, ingen plattformsbegränsningar.
  • Jaa 21+ kompatibla .
  • MIT licensierad - Använd den i personliga, kommersiella eller äganderättsliga projekt utan begränsningar.
  • Scenografisk arkitektur - ett bekant träd av knappar, mesh, kameror och material.
  • Multiformat stöd - Läs och skriv OBJ, STL, glTF 2.0 och GLB-filer; läs FBX-filer.

Snabb start

Maven Installation

Lägg till följande beroende på din pom.xml:

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

Din första omvandling

Det enklaste användningsförfarandet är att ladda en 3D-fil i ett format och spara den i det andra. Här är en tvålinjekonvertering från OBJ till 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 är centrala ingångspunkten. ringa Scene.fromFile() med en filvägen för att ladda en modell, sedan ringa save() med mållådan. biblioteket infogar formatet från filändelsen.

Att bygga en scen från Scratch

Du kan också bygga scener programmatiskt:

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

Detta skapar en ny scen, lägger till ett barn nod som heter “Box” under roten, placerar det i koordinater (1, 2, 3), och exporterar resultatet som en glTF-fil.

Ladda med Format-specifika alternativ

När du behöver bättre kontroll över laddningsprocessen, ger varje format en dedikerad alternativklass. Till exempel laddar en STL-fil med uttryckliga alternativ:

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() statisk metod accepterar någon av de lastalternativ typer: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,eller FbxLoadOptions.

Att gå igenom scenen grafen

När en scen är laddad kan du gå genom knutträdet för att inspektera eller ändra dess innehåll:

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

Denna mönster är användbar för debugging, generera rapporter om modellinnehåll eller selektivt modifiera delar av en scen innan återexport.

Tillämpa Transformers

Positionering av noder i 3D-utrymme görs genom Transform Objekt på varje 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");
    }
}

Transformationer följer den standardmodellen för förälder-barn arv: ett barns världsutrymmeposition är kombinationen av dess lokala transformation och alla förfäder omvandlas till roten.

Vad ingår i

Biblioteket fartyg med en fokuserad uppsättning kapaciteter utformade runt 3D scenen-grafismodellen.

Scenografiska grafer

Scenografin är bakgrunden till API. Varje 3D-fil representeras som en trädstruktur:

KlasserRollen
SceneToppnivå container; rötterna i scenen grafen
NodeEn namngiven position i trädet; håller transformationer och barn noder
EntityAbstrakt bas för visuella objekt som är anslutna till noder
MeshPolygonal geometri - vertikaler, ansikten, normala
CameraVirtual kamera definition
TransformLokalt översättnings-, rotations- och skala för en nod
GlobalTransformDatoriserad världsutrymme transformation

material

Biblioteket ger en PBR (Fysiskt Baserad Rendering) materialmodell:

  • PbrMaterial - fysiskt baserat rendering material med albedo, metallighet, grymhet, emissiv färg och transparens. Detta är den enda betongmaterialklassen tillgänglig i Java-utgåvan.

Matte Utiliteter

Den com.aspose.threed Paket innehåller viktiga matematiska primitiver:

  • Vektorn3 - 3-komponentvector för positioner, riktningar och färger.
  • Matrix4 4x4 transformation matrix.
  • Kvartal Rotationsrepresentation är.
  • BoundingBox - axel-aligned gränssnitt för rymdfrågor.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Ladda och spara alternativ

Varje format har dedikerade alternativ klasser som låter dig kontrollera import och export beteende:

FormateraLadda alternativenSpara alternativ
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GTTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(enbart för import)

Till exempel, att exportera glTF med ganska tryckt JSON och ett flipped koordinatsystem:

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

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

Stödda format

I följande tabell sammanfattas de format som Aspose.3D FOSS för Java kan läsa och skriva.

FormateraUtvidgningenImport avExportenNoter
OBJ.objJa jaJa jaMed MTL material
STL.stlJa jaJa jaBinära + ASCII
GTTF 2.0.gltfJa jaJa jaJSON format
GLB.glbJa jaJa jaBinär glTF via GltfSaveOptions
FBX.fbxJa jaNej inteEndast import

OBJ, STL, glTF och GLB stöder både laddning och besparing. FBX stöds för import endast.

Format Utvalda Guide

Att välja rätt format beror på ditt användningsfall:

  • OBJ är idealisk när du behöver maximal kompatibilitet över 3D-verktyg. Nästan varje modelleringsprogram kan läsa och skriva OBJ. Det fungerar bra för mäs datautbyte men bär endast grundläggande materialinformation via medföljande MTL-filer.
  • STL Det lagrar rå triangulerad geometri utan material eller scen hierarki, vilket är exakt vad slicer programvara förväntar sig. Om din rörlinje slutar på en 3D-skrivare, STL är det enkla valet.
  • GTTF är den moderna standarden för web och realtid 3D. Det stöder PBR-material, full scen hierarkier, och är utformad för effektiv överföring. Använd glTF när du bygger webbbaserade tittare, arbetar med three.js eller Babylon.js, eller riktar sig till någon realtime rendering pipeline.
  • FBX är djupt integrerad i spelutveckling och digitala innehållsskapande arbetsflöden. Det stöder rika scenen data inklusive hierarki och material. Aspose.3D FOSS för Java stödjer FBX Endast import - Använd den för att ladda FBX- tillgångar och konvertera dem till andra format.

Kända begränsningar

Det är viktigt att notera att Scene.render() är inte stöds i FOSS-editionen. kallande denna metod kommer att kasta en UnsupportedOperationException.Biblioteket är utformat för filbaserad 3D-behandling - laddning, manipulering, transformation och spara modeller - snarare än realtids rendering till en skärm.

Öppen källkod och licens

Aspose.3D FOSS för Java släpps under MIT licens.Detta innebär att du är fri för:

  • Använd biblioteket i kommersiella och äganderättsliga applikationer.
  • Ändra källkoden för att passa dina behov.
  • Fördelar biblioteket som en del av din egen programvara.

Det finns inga royaltyavgifter, inga användningsgränser och inga tilldelningskrav utöver vad MIT-licensen anger.

Den fullständiga källkoden är värd på GitHub, och bidrag välkomnas: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-för Java

Systemkrav

kravetdetaljerna
Java versioner21 or later
beroendeIngen (Pur Java)
PlattformarAlla plattformar som kör en JVM
Bygg verktygMaven (Rekommenderas för att göra)

Att börja

Här är resurserna för att hjälpa dig gå upp och köra:

  • Dokumentation - omfattande guider och API-vägsram finns tillgängliga på Aspose.3D dokumentation webbplats.
  • Kunskapsbasen - praktiska hur-to artiklar och problemlösning tips i Huvud 3D KB.
  • API referens - detaljerad klass och metod referens till Aspose.3D API Referens.
  • Källkoder - browsera och bidra till GitHub.
  • Maven Centrala - Paketet publiceras som org.aspose:aspose-3d-foss:26.5.0 på Maven Central.

Vanliga användningsfall

Här är några praktiska scenarier där Aspose.3D FOSS för Java passar bra:

Formatera omvandlingsröret

Många lag får 3D-sakter i ett format men behöver dem i en annan. Ett designteam kan arbeta på FBX medan webteamet behöver glTF. Biblioteket låter dig bygga automatiserade omvandlingspåsar:

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

Innan du integrerar en 3D- tillgång i din ansökan kan du vilja validera dess innehåll - kontrollera knut räkningar, verifiera geometri eller bekräfta att förväntade element är närvarande:

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

Scenförsamling

Du kan ladda flera modeller och kombinera dem i en enda 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");

Vad är Nästa

I kommande inlägg täcker vi:

  • En djup dykning i de viktigaste funktionerna i scenen-graf API, material och matematik verktyg.
  • En praktisk guide för att arbeta med varje stöds 3D-format - OBJ, STL, glTF och FBX - inklusive laddnings/spara alternativ och batchkonverteringsmönster.

Håll dig nykter och känna dig fri att utforska biblioteket och dela din feedback på GitHub.