Mēs esam priecīgi paziņot par pieejamību Aspose.3D FOSS for Java – bezmaksas, atvērtā koda bibliotēka darbam ar 3D failu formātiem Java lietojumprogrammās. Izveidota kā tīra Java risinājums bez vietējām atkarībām, bibliotēka darbojas uz Java 21 un jaunākām versijām, padarot to pieejamu plašam projektu un vidi spektram.

Šajā rakstā aplūkosim, ko bibliotēka piedāvā, kā sākt darbu un kur turpināt.

Kas ir Aspose.3D FOSS for Java?

Aspose.3D FOSS for Java ir viegla 3D failu apstrādes bibliotēka, publicēta zem MIT license. Tā nodrošina ainas grafika API, kas ļauj ielādēt, pārbaudīt, pārveidot un saglabāt 3D modeļus vairākos plaši izmantotos formātos. Bibliotēka ir pilnīgi uzrakstīta Java valodā un neprasa ārējus vietējos bināros failus vai platformas specifiskas konfigurācijas.

Pirmkods ir pieejams GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Galvenie izcēlumi

  • Tīrs Java – nav JNI, nav vietējām bibliotēkām, nav platformas ierobežojumu.
  • Java 21+ savietojams.
  • Licencēts MIT – izmantojiet to personīgajos, komerciālajos vai īpašuma projektos bez ierobežojumiem.
  • Ainas grafu arhitektūra – pazīstama mezglu, režģu, kameru un materiālu koks.
  • Daudzformātu atbalsts – lasīt un rakstīt OBJ, STL, glTF 2.0 un GLB failus; lasīt FBX failus.

Ātrais sākums

Maven instalēšana

Pievienojiet šādu atkarību savam pom.xml:

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

Jūsu pirmā konvertēšana

Visvienkāršākais lietošanas gadījums ir 3D faila ielādēšana vienā formātā un saglabāšana citā. Šeit ir divu rindu konvertēšana no OBJ uz 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");
    }
}

The Scene class ir centrālais ieejas punkts. Izsauciet Scene.fromFile() ar faila ceļu, lai ielādētu modeli, tad izsauciet save() ar mērķa ceļu. Bibliotēka secina formātu no faila paplašinājuma.

Scēnas izveide no nulles

Jūs varat arī konstruēt scēnas programmatiski:

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

Tas izveido jaunu scēnu, pievieno bērna mezglu ar nosaukumu “Box” zem saknes, novieto to koordinātēs (1, 2, 3) un eksportē rezultātu kā glTF failu.

Ielāde ar formāta specifiskām opcijām

Ja jums ir nepieciešama smalkāka kontrole pār ielādes procesu, katrs formāts nodrošina īpašu opciju klasi. Piemēram, STL faila ielāde ar konkrētām opcijām:

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

Šis Scene.fromFile() statiskā metode pieņem jebkuru no ielādes opciju tipiem: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, vai FbxLoadOptions.

Scēnas grafa pārlūkošana

Kad scēna ir ielādēta, jūs varat pāriet cauri mezglu kokam, lai pārbaudītu vai modificētu tā saturu:

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

Šis modelis ir noderīgs atkļūdošanai, atskaišu ģenerēšanai par modeļa saturu vai selektīvai scēnas daļu modificēšanai pirms atkārtotas eksportēšanas.

Transformāciju piemērošana

Mezglu pozicionēšana 3D telpā tiek veikta caur Transform objektu katrā 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");
    }
}

Transformācijas seko standartam vecāka-bērna mantošanas modelim: bērna pasaules telpas pozīcija ir tās lokālās transformācijas un visām senču transformācijām līdz saknei kombinācija.

Kas iekļauts

Bibliotēka tiek piegādāta ar koncentrētu iespēju kopumu, kas izstrādāts ap 3D scene-graph modeli.

Ainu grafiks

Ainu grafiks ir API mugurkauls. Katrs 3D fails tiek attēlots kā koka struktūra:

KlaseLoma
SceneAugstākā līmeņa konteineris; ainas grafika sakne
NodeNosaukta pozīcija koka struktūrā; satur transformācijas un bērna mezglus
EntityAbstrakta bāze vizuāliem objektiem, kas pievienoti mezgliem
MeshPoligonu ģeometrija – virsotnes, sejas, normāles
CameraVirtuālas kameras definīcija
TransformLokāls pārvietojums, rotācija un mērogs mezglam
GlobalTransformAprēķināts pasaules telpas transformējums

Materiāli

Bibliotēka nodrošina PBR (Physically Based Rendering) materiālu modeli:

  • PbrMaterial – fiziski balstīts renderēšanas materiāls ar albedo, metalness, roughness, emissive color un transparency. Tas ir vienīgais konkrētais materiāla klase, kas pieejama Java izdevumā.

Matemātikas utilītprogrammas

The com.aspose.threed pakotne ietver būtiskus matemātiskos primitīvus:

  • Vector3 – 3 komponentu vektors pozīcijām, virzieniem un krāsām.
  • Matrix4 – 4x4 transformācijas matrica.
  • Quaternion – rotācijas reprezentācija.
  • BoundingBox – asīm saskaņota robežkaste telpiskām vaicājumiem.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Ielādes un saglabāšanas iespējas

Katram formātam ir īpašas opciju klases, kas ļauj kontrolēt importēšanas un eksportēšanas uzvedību:

FormātsIelādēt iestatījumusSaglabāt iestatījumus
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (tikai importēšanai)

Piemēram, lai eksportētu glTF ar skaisti formatētu JSON un apgrieztu koordinātu sistēmu:

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

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

Atbalstītie formāti

Zemāk esošā tabula apkopo formātus, kurus Aspose.3D FOSS for Java var nolasīt un rakstīt.

FormātsPaplašinājumsImportētEksportētPiezīmes
OBJ.objAr MTL materiāliem
STL.stlBinārs + ASCII
glTF 2.0.gltfJSON formāts
GLB.glbBinārais glTF caur GltfSaveOptions
FBX.fbxTikai importēšana

OBJ, STL, glTF un GLB atbalsta gan ielādi, gan saglabāšanu. FBX tiek atbalstīts tikai importam.

Formāta izvēles ceļvedis

Pareiza formāta izvēle ir atkarīga no jūsu lietošanas gadījuma:

  • OBJ ir ideāls, ja jums ir nepieciešama maksimāla saderība starp 3D rīkiem. Gandrīz katra modelēšanas lietojumprogramma var nolasīt un rakstīt OBJ. Tas labi darbojas tīklu datu apmaiņai, bet nes tikai pamata materiālu informāciju caur pavadīšanas MTL failiem.
  • STL ir izvēlētais formāts 3D drukāšanas darbplūsmām. Tas saglabā neapstrādātu trīsstūra ģeometriju bez materiāliem vai ainas hierarhijas, kas ir tieši tas, ko sagaida slicer programmatūra. Ja jūsu darbplūsma beidzas pie 3D printera, STL ir vienkāršais izvēles variants.
  • glTF ir mūsdienu standarts tīmekļa un reāllaika 3D. Tas atbalsta PBR materiālus, pilnas ainas hierarhijas un ir izstrādāts efektīvai pārraidei. Izmantojiet glTF, veidojot tīmekļa skatītājus, strādājot ar three.js vai Babylon.js, vai mērķējot uz jebkuru reāllaika renderēšanas cauruļvadu.
  • FBX ir dziļi integrēts spēļu izstrādes un digitālās satura veidošanas darba plūsmās. Tas atbalsta bagātīgu ainas datu kopumu, ieskaitot hierarhijas un materiālus. Aspose.3D FOSS for Java atbalsta FBX tikai importēt – izmantojiet to, lai ielādētu FBX aktīvus un konvertētu tos uz citām formātām.

Zināmie ierobežojumi

Ir svarīgi atzīmēt, ka Scene.render() ir nav atbalstīts FOSS izdevumā. Šīs metodes izsaukšana izraisīs UnsupportedOperationException. Bibliotēka ir paredzēta failu bāzētai 3D apstrādei – ielādei, manipulēšanai, transformēšanai un modeļu saglabāšanai – nevis reāllaika renderēšanai uz ekrāna.

Atvērtā koda un licencēšana

Aspose.3D FOSS for Java ir izlaists zem MIT licence. Tas nozīmē, ka jums ir brīvi:

  • Izmantot bibliotēku komerciālās un īpašnieka lietojumprogrammās.
  • Modificēt pirmkodu, lai tas atbilstu jūsu vajadzībām.
  • Izplatiet bibliotēku kā daļu no savas programmatūras.

Nav nekādu honorāru maksas, lietošanas ierobežojumu un atribūcijas prasību, izņemot to, ko nosaka MIT licence.

Pilns pirmkods ir izvietots GitHub, un ieguldījumi ir laipni gaidīti: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Sistēmas prasības

PrasībaDetaļas
Java versija21 or later
AtkarībasNav (tīrs Java)
PlatformasJebkura platforma, kas darbojas ar JVM
Būvēšanas rīksMaven (ieteicams)

Sākums

Šeit ir resursi, kas palīdzēs jums sākt darbu:

  • Dokumentācija – visaptveroši ceļveidi un API pārskati ir pieejami vietnē Aspose.3D dokumentācijas vietne.
  • Zināšanu bāze – praktiski pamācību raksti un problēmu novēršanas padomi vietnē Aspose.3D KB.
  • API atsauce – detalizēta klašu un metožu atsauce vietnē Aspose.3D API atsauce.
  • Avota kods – pārlūkojiet un piedalieties GitHub.
  • Maven Central – pakotne ir publicēta kā com.aspose:aspose-3d-foss Maven Central vietnē.

Biežākie lietošanas gadījumi

Šeit ir daži praktiski scenāriji, kuros Aspose.3D FOSS priekš Java labi iederas:

Formāta konvertēšanas caurules

Daudzas komandas saņem 3D aktīvus vienā formātā, bet tiem ir vajadzīgs cits. Dizaina komanda var strādāt ar FBX, kamēr tīmekļa komandai vajag glTF. Bibliotēka ļauj izveidot automatizētas konvertēšanas caurules:

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

Before integrating a 3D asset into your application, you may want to validate its contents – checking node counts, verifying geometry, or confirming that expected elements are present:

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

Scene Assembly

You can load multiple models and combine them into a single 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");

What’s Next

In upcoming posts, we will cover:

  • A deep dive into the key features of the scene-graph API, materials, and math utilities.
  • A practical guide to working with each supported 3D format – OBJ, STL, glTF, and FBX – including load/save options and batch conversion patterns.

Stay tuned, and feel free to explore the library and share your feedback on GitHub.