Aspose.3D FOSS for Java palaiko penkis 3D failų formatus: OBJ, STL, glTF, GLB, ir FBX (tik importavimui).
Visi pavyzdžiai naudoja com.aspose.threed.* paketą:
import com.aspose.threed.*;
Maven priklausomybė:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Formatų apžvalga
Prieš pradedant, štai greita apžvalga keturių palaikomų formatų ir jų tipinių naudojimo atvejų.
| Formatas | Plėtinys | Importuoti | Eksportuoti | Medžiagų palaikymas | Scenos hierarchija |
|---|---|---|---|---|---|
| OBJ | .obj | Taip | Taip | Paprastas (MTL failai) | Plokščias |
| STL | .stl | Taip | Taip | Nėra | Plokščias |
| glTF 2.0 | .gltf | Taip | Taip | PBR | Pilnas |
| GLB | .glb | Taip | Taip | PBR | Pilnas |
| FBX | .fbx | Taip | Ne | Turtingas | Pilnas |
OBJ, STL, glTF ir GLB palaiko tiek importą, tiek eksportą. FBX palaikomas tik importui. GLB (binary glTF) yra kuriamas per GltfSaveOptions su setContentType(FileContentType.BINARY).
OBJ: Wavefront objektas
OBJ yra vienas iš plačiausiai palaikomų 3D tinklo formatų. Jis saugo geometriją paprastu tekstu, su pasirinktu .mtl pagalbinis failas medžiagoms.
OBJ failų įkėlimas
Paprčiausias metodas – tiesiogiai perduoti failo kelią:
Scene scene = Scene.fromFile("model.obj");
Norėdami turėti daugiau kontrolės, naudokite ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Kai OBJ failas nurodo MTL failą (per mtllib direktyvą), biblioteka automatiškai bandys įkelti medžiagų apibrėžimus iš jo. MTL failas turėtų būti toje pačioje kataloge kaip OBJ failas arba nurodytu keliu, nurodytu direktyvoje.
Išsaugoma kaip OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ naudojimo atvejai
- Tinklo duomenų keitimas tarp skirtingų 3D įrankių.
- Modelių importavimas iš turto bibliotekų, kurios platina OBJ formatu.
- Greita geometrijos peržiūra be sudėtingų scenų hierarchijų.
STL: Stereolitografija
STL yra standartinis formatas 3D spausdinimui. Jis atvaizduoja neapdorotą trianguliuotą geometriją be medžiagų, spalvų ar scenų hierarchijos. STL failai yra dviem variantais: ASCII (žmogui skaitomas) ir binarinis (kompaktiškas).
STL failų įkėlimas
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Išsaugoma kaip STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Norėdami valdyti išvestį, naudokite StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL svarstymai
- STL failai turi tik trianguliuotą geometriją. Medžiagos, tekstūros ir scenos hierarchija iš eksporto prarandama.
- Dvejetainis STL yra žymiai mažesnis nei ASCII STL dideliems modeliams.
- STL yra pasirinktas formatas, kai tikslas – 3D spausdintuvas arba pjaustymo programinė įranga.
glTF: GL Transmission Format
glTF yra modernus formatas, sukurtas efektyviam 3D turinio perdavimui ir įkėlimui, ypač internete ir realaus laiko programose. Jis palaiko PBR medžiagas, scenų hierarchijas ir animacijas.
Įkeliami glTF failai
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Išsaugoma kaip glTF
Pagrindinis išsaugojimas naudoja failo plėtinį formato nustatymui:
scene.save("output.gltf");
Išsamiai valdymui, naudokite GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GltfSaveOptions detalės
| Metodas | Tikslas |
|---|---|
setFlipCoordinateSystem(boolean) | Apversti koordinatų sistemos ašį eksportuojant. Naudinga konvertuojant iš Y‑aukščio į Z‑aukštį arba atvirkščiai. |
setPrettyPrint(boolean) | Formatuokite išvesties JSON su įtraukimu, kad būtų lengviau skaityti. Nustatykite į false mažesniam failo dydžiui gamyboje. |
glTF naudojimo atvejai
- Žiniatinklio 3D peržiūros programos (three.js, Babylon.js).
- Realiojo laiko programos ir žaidimų varikliai.
- Išsaugant PBR medžiagų apibrėžimus tarp įrankių.
FBX: Filmbox (Tik importavimas)
FBX yra Autodesk nuosavybinis formatas, plačiai naudojamas žaidimų kūrime ir skaitmeninio turinio kūrime. Jis palaiko turtingas scenų hierarchijas, medžiagas ir animacijas. Aspose.3D FOSS for Java palaiko FBX dėl tik importavimas – eksportuoti į FBX nepasiekiama.
FBX failų įkėlimas
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
FBX konvertavimas į kitus formatus
Kadangi FBX eksportas nepalaikomas, konvertuokite importuotas FBX scenas į glTF, GLB, OBJ arba STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX naudojimo atvejai
- Turto importavimas iš Autodesk įrankių (Maya, 3ds Max) ir konvertavimas į kitus formatus.
- Įkeliamas su rigais sukurtas personažų ir animuotų scenų duomenys, kad būtų iš naujo eksportuota į glTF/GLB.
Masinė konversija
Įprasta darbo eiga – konvertuoti visą katalogą failų iš vieno formato į kitą. Štai šablonas masinei konversijai:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
Tai įkelia visus .obj failą kataloge, konvertuoja kiekvieną į glTF su gražiai formatuota išvestimi ir įrašo rezultatus. Galite pritaikyti šį modelį bet kuriai šaltinio ir paskirties formato kombinacijai.
Kryžminės formatų konversijos nuoroda
Žemiau pateikta lentelė rodo, ko tikėtis konvertuojant tarp formatų.
| Nuo | Į | Geometrija | Medžiagos | Hierarchija | Pastabos |
|---|---|---|---|---|---|
| OBJ | STL | Išsaugota | Prarasta | N/A | STL neturi medžiagų palaikymo |
| OBJ | glTF/GLB | Išsaugota | Konvertuota į PBR | Plokščias | MTL medžiagos susietos, kai įmanoma |
| STL | OBJ | Išsaugota | Nėra | N/A | Nėra medžiagų šaltinyje |
| STL | glTF/GLB | Išsaugota | Numatytasis | Plokščias | Numatytoji medžiaga pritaikyta |
| glTF | OBJ | Išsaugota | Supaprastinta | Išlyginta | PBR į bazinę medžiagą |
| glTF | STL | Išsaugota | Prarasta | Išlyginta | Tik geometrija |
| FBX | OBJ | Išsaugota | Supaprastinta | Išlyginta | Medžiagos supaprastinimas |
| FBX | STL | Išsaugota | Prarasta | Išlyginta | Tik geometrija |
| FBX | glTF/GLB | Išsaugota | Konvertuota į PBR | Išsaugota | Geras tikslumas |
Bendros konversijos gairės
- Geometrija visada išsaugoma visų formatų porų atžvilgiu.
- Medžiagos geriausiai išlieka tarp glTF ir FBX, kurie abu palaiko turtingus medžiagų modelius. Konvertavimas į STL visada pašalina medžiagas. Konvertavimas į OBJ supaprastina medžiagas iki bazinio MTL modelio.
- Scenos hierarchija yra išsaugoma tarp glTF ir FBX. OBJ ir STL sukuria plokščias struktūras.
Viską susiejant
Čia pateiktas pilnas pavyzdys, kuris įkelia OBJ failą, tikrina jo mazgus ir eksportuoja į glTF ir GLB:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
Santrauka
Aspose.3D FOSS for Java suteikia nuoseklią API per kelis formatus. Pagrindiniai punktai:
- OBJ – paprastas mesh keitimas su bazinėmis medžiagomis.
- STL – tik geometrijos formatas 3D spausdinimo procesams.
- glTF / GLB – modernus PBR-palaikantis formatas internetui ir realaus laiko naudojimui. Naudokite
GltfSaveOptionssusetContentType(FileContentType.BINARY)GLB išvesties generavimui. - FBX – tik importavimui; turtingas formatas įkelti išteklius iš žaidimų variklių ir DCC įrankių.
Naudokite formatui specifines įkėlimo ir išsaugojimo parinkčių klases (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kai reikia smulkios kontrolės importo arba eksporto procese.
Daugiau informacijos rasite Aspose.3D dokumentacija arba naršykite šaltinį GitHub.