Aspose.3D FOSS pre Java podporuje päť 3D formátov súborov: OBJ, STL, glTF, GLB, a FBX (iba import).
Všetky príklady používajú com.aspose.threed.* balík:
import com.aspose.threed.*;
Maven závislosť:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Prehľad formátov
Predtým, než sa pustíme, tu je stručný prehľad štyroch podporovaných formátov a ich typických prípadov použitia.
| Formát | Rozšírenie | Importovať | Exportovať | Podpora materiálov | Hierarchia scény |
|---|---|---|---|---|---|
| OBJ | .obj | Áno | Áno | Základné (MTL súbory) | Plochý |
| STL | .stl | Áno | Áno | Žiadne | Plochý |
| glTF 2.0 | .gltf | Áno | Áno | PBR | Plný |
| GLB | .glb | Áno | Áno | PBR | Plný |
| FBX | .fbx | Áno | Nie | Bohaté | Úplné |
OBJ, STL, glTF a GLB podporujú import aj export. FBX je podporovaný pre iba import. GLB (binárny glTF) sa vytvára pomocou GltfSaveOptions s setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ je jedným z najrozšírenejších formátov 3D sietí. Ukladá geometriu ako obyčajný text, s voliteľným .mtl sprievodný súbor pre materiály.
Načítanie OBJ súborov
Najjednoduchší prístup je odovzdať cestu k súboru priamo:
Scene scene = Scene.fromFile("model.obj");
Pre väčšiu kontrolu použite ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Keď OBJ súbor odkazuje na MTL súbor (prostredníctvom mtllib direktívy), knižnica sa pokúsi načítať definície materiálov z neho automaticky. MTL súbor by mal byť v rovnakom adresári ako OBJ súbor alebo na ceste špecifikovanej v direktíve.
Ukladanie ako OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Prípady použitia OBJ
- Vymieňanie dát o meshi medzi rôznymi 3D nástrojmi.
- Importovanie modelov z knižníc assetov, ktoré distribuujú vo formáte OBJ.
- Rýchla kontrola geometrie bez zložitých hierarchií scény.
STL: Stereolitografia
STL je štandardný formát pre 3D tlač. Reprezentuje surovú triangulovanú geometriu bez materiálov, farieb ani hierarchie scény. Súbory STL existujú v dvoch variantách: ASCII (čitateľná pre človeka) a binárna (kompaktná).
Načítanie súborov STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Ukladanie ako STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Na ovládanie výstupu použite StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Úvahy o STL
- Súbory STL obsahujú iba triangulovanú geometriu. Materiály, textúry a hierarchia scény sa pri exporte stratia.
- Binárny STL je pre veľké modely podstatne menší ako ASCII STL.
- STL je formátom voľby, keď je cieľom 3D tlačiareň alebo slicer softvér.
glTF: GL Transmission Format
glTF je moderný formát navrhnutý pre efektívny prenos a načítanie 3D obsahu, najmä na webe a v aplikáciách v reálnom čase. Podporuje PBR materiály, hierarchie scény a animácie.
Načítavanie súborov glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Ukladanie ako glTF
Základné ukladanie používa príponu súboru na určenie formátu:
scene.save("output.gltf");
Pre podrobnejšiu kontrolu použite GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Podrobnosti GltfSaveOptions
| Metóda | Účel |
|---|---|
setFlipCoordinateSystem(boolean) | Preklopte os súradnicového systému počas exportu. Užitočné pri konverzii z Y-up na Z-up alebo naopak. |
setPrettyPrint(boolean) | Formátujte výstupný JSON s odsadením pre čitateľnosť. Nastavte na false pre menšiu veľkosť súboru v produkcii. |
Prípady použitia glTF
- Webové 3D prehliadače (three.js, Babylon.js).
- Aplikácie v reálnom čase a herné enginy.
- Zachovanie definícií PBR materiálov naprieč nástrojmi.
FBX: Filmbox (iba import)
FBX je proprietárny formát od Autodesk, ktorý je široko používaný vo vývoji hier a tvorbe digitálneho obsahu. Podporuje bohaté hierarchie scény, materiály a animácie. Aspose.3D FOSS pre Java podporuje FBX pre iba import – export do FBX nie je k dispozícii.
Načítanie súborov FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Konverzia FBX do iných formátov
Keďže export FBX nie je podporovaný, konvertujte importované scény FBX do glTF, GLB, OBJ alebo STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Príklady použitia FBX
- Importovanie aktív z nástrojov Autodesk (Maya, 3ds Max) a konverzia do iných formátov.
- Načítavajú sa rigované postavy a animované scény pre opätovný export do glTF/GLB.
Dávková konverzia
Bežný pracovný postup je konverzia celého adresára súborov z jedného formátu do druhého. Tu je vzor pre dávkovú konverziu:
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");
}
}
}
Toto načíta každý .obj súbor v adresári, prevedie každý do glTF s pekne formátovaným výstupom a uloží výsledky. Tento vzor môžete prispôsobiť pre akúkoľvek kombináciu vstupného a výstupného formátu.
Referenčný prehľad konverzie medzi formátmi
Nasledujúca tabuľka ukazuje, čo očakávať pri konverzii medzi formátmi.
| Z | Do | Geometria | Materiály | Hierarchia | Poznámky |
|---|---|---|---|---|---|
| OBJ | STL | Zachované | Stratené | N/A | STL nemá podporu materiálov |
| OBJ | glTF/GLB | Zachované | Prevedené na PBR | Plochý | Materiály MTL namapované, kde je to možné |
| STL | OBJ | Zachované | Žiadne | N/A | Žiadne materiály v zdroji |
| STL | glTF/GLB | Zachované | Predvolené | Plochý | Použitý predvolený materiál |
| glTF | OBJ | Zachované | Zjednodušené | Sploštené | PBR na základný materiál |
| glTF | STL | Zachované | Stratené | Zploštené | Iba geometria |
| FBX | OBJ | Zachované | Zjednodušené | Zploštené | Zjednodušenie materiálu |
| FBX | STL | Zachované | Stratené | Zploštené | Iba geometria |
| FBX | glTF/GLB | Zachované | Prevedené na PBR | Zachované | Dobrá vernosť |
Všeobecné usmernenia pre konverziu
- Geometria je vždy zachovaná naprieč všetkými pármi formátov.
- Materiály najlepšie prežívajú medzi glTF a FBX, ktoré oba podporujú bohaté modely materiálov. Konverzia do STL vždy odstraňuje materiály. Konverzia do OBJ zjednodušuje materiály na základný model MTL.
- Hierarchia scény je zachovaná medzi glTF a FBX. OBJ a STL vytvárajú ploché štruktúry.
Zhrnutie všetkého
Tu je kompletný príklad, ktorý načíta súbor OBJ, skontroluje jeho uzly a exportuje do glTF aj 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.");
}
}
Zhrnutie
Aspose.3D FOSS for Java vám poskytuje konzistentné API naprieč viacerými formátmi. Kľúčové body:
- OBJ – jednoduchá výmena sietí s základnými materiálmi.
- STL – formát len pre geometriu pre 3D tlačové pipeliney.
- glTF / GLB – moderný formát podporujúci PBR pre web a použitie v reálnom čase. Použiť
GltfSaveOptionsssetContentType(FileContentType.BINARY)pre výstup GLB. - FBX – iba import; bohatý formát na načítanie aktív z herných enginov a DCC nástrojov.
Použite triedy možností načítania a ukladania špecifické pre formát (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions).
Pre viac podrobností navštívte Aspose.3D dokumentáciu alebo si prezerajte zdroj na GitHub.