Džiaugiamės galėdami pranešti apie prieinamumą Aspose.3D FOSS skirta Java – nemokama, atviro kodo biblioteka, skirta dirbti su 3D failų formatais Java programose. Sukurta kaip grynas Java sprendimas be jokių natūralių priklausomybių, biblioteka veikia Java 21 ir vėlesnėse versijose, todėl ji prieinama plačiam projektų ir aplinkų spektrui.
Šiame įraše apžvelgiama, ką biblioteka siūlo, kaip pradėti darbą ir kur toliau eiti.
Kas yra Aspose.3D FOSS for Java?
Aspose.3D FOSS skirta Java yra lengva 3D failų apdorojimo biblioteka, publikuota pagal MIT license. Ji suteikia scenų grafiko API, leidžiančią įkelti, peržiūrėti, transformuoti ir išsaugoti 3D modelius keliuose plačiai naudojamuose formatuose. Biblioteka visiškai parašyta Java kalba ir nereikalauja išorinių natūralių binarinių failų ar platformos specifinių konfigūracijų.
Šaltinio kodas prieinamas GitHub platformoje: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Svarbiausi akcentai
- Grynas Java – nėra JNI, nėra natūralių bibliotekų, nėra platformos apribojimų.
- Java 21+ suderinama.
- MIT licencijos – naudokite ją asmeniniuose, komerciniuose ar nuosavybiniuose projektuose be apribojimų.
- Scenos grafiko architektūra – pažįstama medžio struktūra su mazgais, tinklais, kameromis ir medžiagomis.
- Daugių formatų palaikymas – skaityti ir rašyti OBJ, STL, glTF 2.0 ir GLB failus; skaityti FBX failus.
Greita pradžia
Maven diegimas
Pridėkite šią priklausomybę prie savo pom.xml:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Jūsų pirmasis konvertavimas
Paprastiausias naudojimo atvejis – įkelti 3D failą vienu formatu ir išsaugoti jį kitu. Čia pateikiama dviejų eilučių konversija iš OBJ į 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");
}
}
Ši Scene klasė yra pagrindinis įėjimo taškas. Iškvieskite Scene.fromFile() su failo keliu, kad įkeltumėte modelį, tada iškvieskite save() su tiksliniu keliu. Biblioteka nustato formatą pagal failo plėtinį.
Scenos kūrimas nuo pradžių
Taip pat galite konstruoti scenas programiškai:
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");
}
}
Tai sukuria naują sceną, prideda vaikų mazgą pavadintą “Box” po šaknimi, nustato jo poziciją koordinatėse (1, 2, 3) ir eksportuoja rezultatą kaip glTF failą.
Įkėlimas su formatui būdingais parametrais
Kai reikia smulkesnės kontrolės įkėlimo procesui, kiekvienas formatas suteikia atskirą parametrų klasę. Pavyzdžiui, įkeliant STL failą su aiškiai nurodytais parametrais:
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");
}
}
Ši Scene.fromFile() statinis metodas priima bet kurį iš įkėlimo parinkčių tipų: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, arba FbxLoadOptions.
Scenos grafiko naršymas
Kai scena įkelta, galite vaikščioti po mazgų medį, kad patikrintumėte arba modifikuotumėte jo turinį:
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 naudingas derinimui, ataskaitų generavimui apie modelio turinį arba išrinktinėms scenos dalių modifikacijoms prieš iš naujo eksportavimą.
Transformacijų taikymas
Pozicionavimas mazgų 3D erdvėje atliekamas per Transform objektas ant kiekvieno 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");
}
}
Transformacijos laikosi standartinio tėvo‑vaiko paveldėjimo modelio: vaiko pasaulio erdvės pozicija yra vietinės transformacijos ir visų tėvų transformacijų iki šaknies kombinacija.
Kas įtraukta
Biblioteka tiekiama su sutelktų galimybių rinkiniu, sukurtu aplink 3D scenų grafiko modelį.
Scenos grafas
Scenos grafas yra API stuburas. Kiekvienas 3D failas yra atvaizduojamas kaip medžio struktūra:
| Klasė | Rolė |
|---|---|
Scene | Aukščiausio lygio konteineris; scenos grafiko šaknis |
Node | Pavadinta pozicija medyje; talpina transformacijas ir vaikų mazgus |
Entity | Abstrakti bazė vizualiems objektams, pririštiems prie mazgų |
Mesh | Poligoninė geometrija – viršūnės, paviršiai, normalių vektoriai |
Camera | Virtualios kameros apibrėžimas |
Transform | Vietinis poslinkis, sukimas ir mastelis mazgo |
GlobalTransform | Apskaičiuota pasaulio erdvės transformacija |
Medžiagos
Biblioteka suteikia PBR (fizinio pagrindo atvaizdavimo) medžiagų modelį:
- PbrMaterial – fiziškai pagrįsta renderingo medžiaga su albedo, metalinumu, šiurkštumu, švytinčia spalva ir skaidrumu. Tai yra vienintelė konkreti medžiagos klasė, prieinama Java leidime.
Matematikos įrankiai
Šis com.aspose.threed paketas apima esminius matematikos primityvus:
- Vector3 – 3 komponentų vektorius pozicijoms, kryptims ir spalvoms.
- Matrix4 – 4x4 transformacijos matrica.
- Quaternion – sukimosi atvaizdavimas.
- BoundingBox – ašimis lygiavietė ribinė dėžė erdviniams užklausoms.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)
Įkėlimo ir išsaugojimo parinktys
Kiekvienas formatas turi atskiras parinkčių klases, leidžiančias valdyti importo ir eksporto elgseną:
| Formatas | Įkėlimo parinktys | Išsaugojimo parinktys |
|---|---|---|
| OBJ | ObjLoadOptions | ObjSaveOptions |
| STL | StlLoadOptions | StlSaveOptions |
| glTF / GLB | GltfLoadOptions | GltfSaveOptions |
| FBX | FbxLoadOptions | – (tik importas) |
Pavyzdžiui, norint eksportuoti glTF su gražiai formatuotu JSON ir apverstu koordinačių sistema:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Palaikomi formatai
Žemiau pateikta lentelė apibendrina formatus, kuriuos Aspose.3D FOSS for Java gali skaityti ir rašyti.
| Formatas | Plėtinys | Importuoti | Eksportuoti | Pastabos |
|---|---|---|---|---|
| OBJ | .obj | Taip | Taip | Su MTL medžiagomis |
| STL | .stl | Taip | Taip | Binary + ASCII |
| glTF 2.0 | .gltf | Taip | Taip | JSON formatas |
| GLB | .glb | Taip | Taip | Dvejetainis glTF per GltfSaveOptions |
| FBX | .fbx | Taip | Ne | Tik importavimas |
OBJ, STL, glTF ir GLB palaiko tiek įkėlimą, tiek išsaugojimą. FBX palaikomas tik importui.
Formato pasirinkimo gidas
Tinkamo formato pasirinkimas priklauso nuo jūsų naudojimo atvejo:
- OBJ yra idealus, kai reikia maksimalios suderinamumo su 3D įrankiais. Beveik kiekviena modeliavimo programa gali skaityti ir rašyti OBJ. Jis gerai tinka mesh duomenų mainams, tačiau perneša tik pagrindinę medžiagos informaciją per pagalbinius MTL failus.
- STL yra pasirinktas formatas 3D spausdinimo darbo srautams. Jis saugo neapdorotą trianguliuotą geometriją be medžiagų ar scenos hierarchijos, ką tiksliai tikisi slicer programinė įranga. Jei jūsų procesas baigiasi 3D spausdintuvu, STL yra tiesioginis pasirinkimas.
- glTF yra šiuolaikinis standartas žiniatinkliui ir realaus laiko 3D. Jis palaiko PBR medžiagas, pilnas scenų hierarchijas ir yra sukurtas efektyviam perdavimui. Naudokite glTF kuriant žiniatinklio peržiūros programas, dirbant su three.js arba Babylon.js, arba siekiant bet kokio realaus laiko renderavimo konvejerio.
- FBX yra giliai integruotas į žaidimų kūrimo ir skaitmeninio turinio kūrimo darbo eigas. Jis palaiko turtingus scenų duomenis, įskaitant hierarchijas ir medžiagas. Aspose.3D FOSS for Java palaiko FBX tik importavimas – naudokite jį FBX išteklių įkėlimui ir konvertavimui į kitus formatus.
Žinomi apribojimai
Svarbu pažymėti, kad Scene.render() yra nepalaikoma FOSS leidimo versijoje. Iškviečiant šį metodą bus išmesta an UnsupportedOperationException. Biblioteka sukurta failų pagrindu 3D apdorojimui – įkėlimui, manipuliavimui, transformavimui ir modelių išsaugojimui – o ne realaus laiko atvaizdavimui ekrane.
Atviro kodo ir licencijavimas
Aspose.3D FOSS for Java išleidžiamas pagal MIT licencija. Tai reiškia, kad esate laisvi:
- Naudoti biblioteką komercinėse ir nuosavybinėse programose.
- Modifikuoti šaltinio kodą pagal savo poreikius.
- Platinkite biblioteką kaip savo programinės įrangos dalį.
Nėra autorinių mokėjimų, naudojimo apribojimų ir priskyrimo reikalavimų, išskyrus tai, ką nurodo MIT licencija.
Visas šaltinis talpinamas GitHub platformoje, o indėliai yra laukiami: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java
Sistemos reikalavimai
| Reikalavimas | Detalė |
|---|---|
| Java versija | 21 or later |
| Priklausomybės | Nėra (grynas Java) |
| Platformos | Bet kuri platforma, kuri veikia JVM |
| Kūrimo įrankis | Maven (rekomenduojama) |
Pradžia
Čia yra ištekliai, kurie padės jums pradėti darbą:
- Dokumentacija – išsamios vadovės ir API apžvalgos yra prieinamos on the Aspose.3D dokumentacijos svetainė.
- Žinių bazė – praktiniai kaip atlikti straipsniai ir problemų sprendimo patarimai Aspose.3D KB.
- API nuoroda – išsamus klasių ir metodų aprašymas Aspose.3D API Reference.
- Šaltinio kodas – naršyti ir prisidėti GitHub.
- Maven Central – paketas publikuojamas kaip
com.aspose:aspose-3d-fossMaven Central.
Common Use Cases
Here are some practical scenarios where Aspose.3D FOSS for Java fits well:
Format Conversion Pipelines
Many teams receive 3D assets in one format but need them in another. A design team might work in FBX while the web team needs glTF. The library lets you build automated conversion pipelines:
// 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
Prieš integruodami 3D turtą į savo programą, galbūt norėsite patikrinti jo turinį – skaičiuoti mazgų skaičių, patikrinti geometriją arba įsitikinti, kad yra laukiamų elementų:
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");
}
}
Scenos surinkimas
Galite įkelti kelis modelius ir sujungti juos į vieną 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");
Kas toliau
Būsimiuose įrašuose aptarsime:
- Išsamus pagrindinių scenų grafų API, medžiagų ir matematikos įrankių savybių tyrimas.
- Praktinis vadovas, kaip dirbti su kiekvienu palaikomu 3D formatu – OBJ, STL, glTF ir FBX – įskaitant įkėlimo/išsaugojimo parinktis ir masinio konvertavimo šablonus.
Sekite naujienas ir drąsiai tyrinėkite biblioteką bei dalinkitės savo atsiliepimais GitHub platformoje.