Aspose.3D FOSS za Java podržava pet 3D formata datoteka: OBJ, STL, glTF, GLB, i FBX (samo uvoz).
Svi primeri koriste com.aspose.threed.* paket:
import com.aspose.threed.*;
Maven zavisnost:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Pregled formata
Pre nego što zaronimo, evo kratkog pregleda četiri podržana formata i njihovih tipičnih slučajeva upotrebe.
| Format | Ekstenzija | Uvoz | Izvoz | Podrška za materijale | Hijerarhija scene |
|---|---|---|---|---|---|
| OBJ | .obj | Da | Da | Osnovno (MTL fajlovi) | Ravno |
| STL | .stl | Da | Da | Ništa | Ravno |
| glTF 2.0 | .gltf | Da | Da | PBR | Potpuno |
| GLB | .glb | Da | Da | PBR | Potpuno |
| FBX | .fbx | Da | Ne | Bogato | Potpuno |
OBJ, STL, glTF i GLB podržavaju i uvoz i izvoz. FBX je podržan za samo uvoz. GLB (binary glTF) se proizvodi putem GltfSaveOptions sa setContentType(FileContentType.BINARY).
OBJ: Wavefront objekat
OBJ je jedan od najšire podržanih 3D formata mreža. On čuva geometriju kao običan tekst, uz opcioni .mtl prateću datoteku za materijale.
Učitavanje OBJ fajlova
Najjednostavniji pristup je da se putanja do fajla prosledi direktno:
Scene scene = Scene.fromFile("model.obj");
Za veću kontrolu, koristite ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Kada OBJ datoteka referiše na MTL datoteku (preko mtllib direktive), biblioteka će pokušati automatski da učita definicije materijala iz nje. MTL datoteka treba da bude u istom direktorijumu kao OBJ datoteka ili na putanji navedenoj u direktivi.
Čuvanje kao OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
OBJ slučajevi upotrebe
- Razmena podataka o mrežama između različitih 3D alata.
- Uvoz modela iz biblioteka resursa koje distribuiraju u OBJ formatu.
- Brza inspekcija geometrije bez složenih hijerarhija scene.
STL: Stereolitografija
STL je standardni format za 3D štampu. Predstavlja sirovu trianguliranu geometriju bez materijala, boja ili hijerarhije scene. STL fajlovi dolaze u dve varijante: ASCII (čitljiv za čoveka) i binarni (kompaktniji).
Učitavanje STL fajlova
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Čuvanje kao STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Da biste kontrolisali izlaz, koristite StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL razmatranja
- STL fajlovi sadrže samo trianguliranu geometriju. Materijali, teksture i hijerarhija scene se gube prilikom izvoza.
- Binarni STL je značajno manji od ASCII STL za velike modele.
- STL je format po izboru kada je cilj 3D štampač ili softver za sečenje.
glTF: GL Transmission Format
glTF je moderan format dizajniran za efikasno prenošenje i učitavanje 3D sadržaja, posebno na webu i u aplikacijama u realnom vremenu. Podržava PBR materijale, hijerarhije scena i animacije.
Učitavanje glTF fajlova
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Čuvanje kao glTF
Osnovno čuvanje koristi ekstenziju fajla da odredi format:
scene.save("output.gltf");
Za detaljnu kontrolu, koristite GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Detalji GltfSaveOptions
| Metod | Svrha |
|---|---|
setFlipCoordinateSystem(boolean) | Preokrenite osu koordinatnog sistema prilikom izvoza. Korisno je pri konverziji iz Y‑gore u Z‑gore ili obrnuto. |
setPrettyPrint(boolean) | Formatirajte izlazni JSON uvlačenjem radi čitljivosti. Postavite na false za manju veličinu fajla u produkciji. |
glTF slučajevi upotrebe
- Web‑bazirani 3D pregledači (three.js, Babylon.js).
- Aplikacije u realnom vremenu i game engine‑i.
- Čuvanje PBR definicija materijala između alata.
FBX: Filmbox (samo uvoz)
FBX je vlasnički format kompanije Autodesk koji je široko korišćen u razvoju igara i digitalnoj kreaciji sadržaja. Podržava bogate hijerarhije scena, materijale i animacije. Aspose.3D FOSS za Java podržava FBX za samo uvoz – izvoz u FBX nije dostupan.
Učitavanje FBX fajlova
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Pretvaranje FBX u druge formate
Pošto izvoz FBX nije podržan, konvertujte uvezene FBX scene u glTF, GLB, OBJ ili STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Upotreba FBX-a
- Uvoz sredstava iz Autodesk alata (Maya, 3ds Max) i konvertovanje u druge formate.
- Učitavanje rigovanih likova i animiranih scena za ponovni izvoz u glTF/GLB.
Grupna konverzija
Uobičajeni radni tok je konvertovanje celog direktorijuma fajlova iz jednog formata u drugi. Evo obrasca za grupnu konverziju:
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");
}
}
}
Ovo učitava svaki .obj datoteku u direktorijumu, konvertuje svaku u glTF sa lepo formatiranim izlazom i čuva rezultate. Možete prilagoditi ovaj obrazac za bilo koju kombinaciju izvornog i odredišnog formata.
Referenca za konverziju između formata
Sledeća tabela prikazuje šta možete očekivati pri konverziji između formata.
| Od | Do | Geometrija | Materijali | Hijerarhija | Napomene |
|---|---|---|---|---|---|
| OBJ | STL | Sačuvano | Izgubljeno | N/A | STL nema podršku za materijale |
| OBJ | glTF/GLB | Sačuvano | Pretvoreno u PBR | Ravno | MTL materijali mapirani gde je moguće |
| STL | OBJ | Sačuvano | Nema | N/A | Nema materijala u izvoru |
| STL | glTF/GLB | Sačuvano | Podrazumevano | Ravno | Podrazumevani materijal primenjen |
| glTF | OBJ | Sačuvano | Pojednostavljeno | Izravnano | PBR u osnovni materijal |
| glTF | STL | Sačuvano | Izgubljeno | Izravnato | Samo geometrija |
| FBX | OBJ | Sačuvano | Pojednostavljeno | Izravnato | Pojednostavljenje materijala |
| FBX | STL | Sačuvano | Izgubljeno | Izravnato | Samo geometrija |
| FBX | glTF/GLB | Sačuvano | Pretvoreno u PBR | Sačuvano | Dobra vernost |
Opšta pravila konverzije
- Geometrija se uvek očuva u svim parovima formata.
- Materijali najbolje opstaju između glTF i FBX, koji oba podržavaju bogate modele materijala. Pretvaranje u STL uvek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
- Hijerarhija scene se očuva između glTF i FBX. OBJ i STL proizvode ravne strukture.
Sastavljanje svega zajedno
Evo kompletnog primera koji učitava OBJ fajl, pregleda njegove čvorove i izvozi u oba formata glTF i 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.");
}
}
Sažetak
Aspose.3D FOSS za Java pruža dosledan API kroz više formata. Ključne tačke:
- OBJ – jednostavna razmena mreža sa osnovnim materijalima.
- STL – format samo za geometriju za 3D štampanje.
- glTF / GLB – moderan format koji podržava PBR za web i real‑time upotrebu. Koristite
GltfSaveOptionssasetContentType(FileContentType.BINARY)za GLB izlaz. - FBX – samo za uvoz; bogat format za učitavanje resursa iz game engine‑ova i DCC alata.
Koristite format‑specifične klase za učitavanje i čuvanje opcija (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kada vam je potrebna detaljna kontrola nad procesom uvoza ili izvoza.
Za više detalja, posetite Aspose.3D dokumentacija ili pregledajte izvor na GitHub.