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 brzog 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 | Puno |
| 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 mesh formata. Čuva geometriju kao običan tekst, uz opcioni .mtl prateći fajl 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 fajl referiše na MTL fajl (preko mtllib direktive), biblioteka će pokušati da automatski učita definicije materijala iz njega. MTL fajl bi trebalo da bude u istom direktorijumu kao OBJ fajl ili na putanji navedenoj u direktivi.
Čuvanje kao OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Primene OBJ-a
- Razmena podataka o mrežama između različitih 3D alata.
- Uvoz modela iz biblioteka sredstava 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 čuva samo trougaonu geometriju. Materijali, teksture i hijerarhija scene nisu podržani i odbacuju se pri izvozu.
- STL izvoz radi ne automatski triangulira. Binary STL zapisuje samo prva 3 vrha svakog poligonalnog lica; četvorouglovi i n‑gon lica se tiho skraćuju. ASCII STL zapisuje sve indekse vrhova po licu, što dovodi do neispravnog izlaza za lica koja nisu trouglovi. Uvek koristite unapred triangulisane mreže (lica koja su svi trouglovi) prilikom izvoza u STL.
- Binarni STL je značajno manji od ASCII STL-a 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 pri konverziji iz Y‑gore u Z‑gore ili obrnuto. |
setPrettyPrint(boolean) | Formatirajte izlaz JSON uz uvlačenje 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 se široko koristi u razvoju igara i digitalnoj kreaciji sadržaja. Aspose.3D FOSS za Java podržava FBX za samo uvoz — izvoz u FBX nije dostupan.
Samo binarni FBX. FBX uvoznik čita samo binarne FBX fajlove. Prosleđivanje ASCII FBX fajla izaziva
ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Hijerarhija čvorova i ekstrakcija materijala iz FBX-a nisu u potpunosti verifikovani; složene FBX scene možda se neće učitati u potpunosti. Animacije i rigovanje nisu implementirani.
Učitavanje FBX fajlova
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Konvertovanje FBX-a u druge formate
Pošto izvoz FBX-a 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);
FBX primene
- Uvoz statičkih mesh resursa iz Autodesk alata (Maya, 3ds Max) i konvertovanje u druge formate.
- Učitavanje binarne FBX geometrije i ponovni izvoz u glTF/GLB, OBJ ili STL.
Grupna konverzija
Uobičajen radni tok je konvertovanje celog direktorijuma fajlova sa jednog formata na 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 sve .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 konvertovanju 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 | Ništa | N/A | Nema materijala u izvoru |
| STL | glTF/GLB | Sačuvano | Podrazumevano | Ravno | Podrazumevani materijal je 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 | Konvertovano u PBR | Sačuvano | Dobra vernost |
Opšti smernice za konverziju
- Geometrija se generalno čuva između parova formata, uz jedan važan izuzetak: prilikom izvoza u STL, mreže moraju biti sastavljene isključivo od trouglastih površina. Binarni STL tiho skraćuje kvadratne i n‑gon površine na njihove prve 3 verteksa; ASCII STL proizvodi neispravan izlaz za ne‑trouglaste površine.
- Materijali najbolje opstaju između glTF i FBX‑uvezanih scena koje uključuju podatke o materijalima. Pretvaranje u STL uvek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
- Hijerarhija scene se čuva između glTF‑format fajlova. OBJ i STL proizvode ravne strukture. FBX hijerarhija i ekstrakcija materijala nisu u potpunosti verifikovani u ovoj verziji.
Sastavljanje svega zajedno
Evo kompletnog primera koji učitava OBJ fajl, ispituje njegove čvorove i izvozi u i 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 vam 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‑print pipeline‑e.
- glTF / GLB – moderan PBR‑sposoban format 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 opcija učitavanja i čuvanja (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kada vam je potrebna detaljna kontrola nad procesom uvoza ili izvoza.
Za više detalja, posetite Aspose.3D dokumentaciju ili pregledajte izvor na GitHub.