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.

Šis ieraksts izskaidro, ko bibliotēka piedāvā, kā sākt 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 scene-graph 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 rakstīta Java valodā un neprasa ārējus vietējos binārus vai platformas specifiskas konfigurācijas.

Avota kods 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.
  • MIT licencēts – izmantojiet to personīgajos, komerciālajos vai īpašuma projektos bez ierobežojumiem.
  • Scēnas grafika arhitektūra – pazīstama koka struktūra ar mezgliem, režģiem, kamerām un materiāliem.
  • 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ācija

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 ielādēt 3D failu vienā formātā un saglabāt to citā. Šeit ir divu rindu pārveide 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");
    }
}

Šis Scene klase ir centrālais ieejas punkts. Izsauc Scene.fromFile() ar faila ceļu, lai ielādētu modeli, tad izsauc 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 ainas 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 ainu, 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 skaidri norādī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");
    }
}

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

Ainas grafika pārlūkošana

Kad aina ir ielādēta, jūs varat pāriet cauri mezglu koku, 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 ainas daļu modificēšanai pirms atkārtotas eksportēšanas.

Transformāciju piemērošana

Mezglu pozicionēšana 3D telpā tiek veikta caur Transform objektu katram 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 kombinācija no tās lokālās transformācijas un visām priekšgājēju transformācijām līdz saknei.

Kas iekļauts

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

Aikskatu grafiks

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

KlaseLoma
SceneAugstākā līmeņa konteineris; ainas grafika sakne
NodeNosaukta pozīcija koks; satur transformācijas un bērnu mezglus
EntityAbstrakta bāze vizuāliem objektiem, kas piesaistīti mezgliem
MeshPoligonu ģeometrija – virsotnes, sejas, normāles
CameraVirtuālās kameras definīcija
TransformLokāls pārvietojums, rotācija un mērogs mezglam
GlobalTransformAprēķināta pasaules telpas transformācija

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 klases variants, kas pieejams 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ēta 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 opcijas

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

FormātsIelādes iespējasSaglabāšanas iespējas
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 priekš Java var nolasīt un rakstīt.

FormātsPaplašinājumsImportētEksportsPiezī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ēt

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 saistītajiem MTL failiem.
  • STL ir izvēlētais formāts 3D drukas darba plūsmām. Tas saglabā neapstrādātu triangulētu ģeometriju bez materiāliem vai skatuves hierarhijas, kas ir tieši tas, ko sagaida slicer programmatūra. Ja jūsu caurule beidzas pie 3D printera, STL ir vienkāršākais izvēles variants.
  • glTF ir mūsdienu standarts tīmekļa un reāllaika 3D. Tas atbalsta PBR materiālus, pilnas skatuves 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 cauruli.
  • FBX ir dziļi integrēts spēļu izstrādes un digitālā satura veidošanas darba plūsmās. Tas atbalsta bagātīgu ainas datu struktūru, 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 tiek izlaists zem MIT licence. Tas nozīmē, ka jums ir brīvi:

  • Izmantot bibliotēku komerciālos un īpašnieka tiesībām aizsargātos lietojumos.
  • Modificējiet avota kodu, 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ākšana

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

  • Dokumentācija – visaptveroši ceļveži 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.
  • Pirmkods – pārlūkot un piedalīties GitHub.
  • Maven Central – pakotne tiek publicēta kā com.aspose:aspose-3d-foss uz Maven Central.

Biežākie lietošanas gadījumi

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

Formāta konvertēšanas caurplūsmas

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

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

Pirms integrēt 3D aktīvu savā lietojumprogrammā, var būt vēlēšanās pārbaudīt tā saturu — pārbaudot mezglu skaitu, verifikējot ģeometriju vai apstiprinot, ka sagaidāmie elementi ir klātesoši:

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

Ainas salikšana

Jūs varat ielādēt vairākus modeļus un apvienot tos vienā ainā:

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

Kas nākamais

Nākotnes rakstos mēs aplūkosim:

  • Padziļināta izpēte par galvenajām scene-graph API, materiālu un matemātikas utilītēm.
  • Praktisks ceļvedis darbam ar katru atbalstīto 3D formātu — OBJ, STL, glTF un FBX — ieskaitot ielādes/saglabāšanas iespējas un grupveida konvertēšanas modeļus.

Sekojiet jaunumiem, un droši izpētiet bibliotēku un dalieties ar savām atsauksmēm GitHub.