Aspose.3D FOSS za Java podržava pet 3D formata datoteka: OBJ, STL, glTF, GLB, i FBX (samo uvoz).
Svi primjeri koriste com.aspose.threed.* paket:
import com.aspose.threed.*;
Maven ovisnost:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Pregled formata
Prije nego što zaronimo, evo kratkog pregleda četiri podržana formata i njihovih tipičnih primjena.
| Format | Ekstenzija | Uvoz | Izvoz | Podrška za materijale | Hijerarhija scene |
|---|---|---|---|---|---|
| OBJ | .obj | Da | Da | Osnovno (MTL datoteke) | 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 (binarni glTF) se proizvodi putem GltfSaveOptions s setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ je jedan od najšire podržanih 3D formata mreža. Pohranjuje geometriju kao običan tekst, s opcionalnim .mtl prateća datoteka za materijale.
Učitavanje OBJ datoteka
Najjednostavniji pristup je proslijediti putanju datoteke izravno:
Scene scene = Scene.fromFile("model.obj");
Za veću kontrolu, upotrijebite ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Kada OBJ datoteka referencira MTL datoteku (putem mtllib direktive), biblioteka će pokušati automatski učitati definicije materijala iz nje. MTL datoteka bi trebala biti u istom direktoriju kao OBJ datoteka ili na putu navedenom u direktivi.
Spremanje kao OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Primjene OBJ-a
- Razmjena 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 ispis. Predstavlja sirovu trianguliranu geometriju bez materijala, boja ili hijerarhije scene. STL datoteke dolaze u dvije varijante: ASCII (čitljiva za čovjeka) i binarna (kompaktna).
Učitavanje STL datoteka
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Spremanje kao STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Za kontrolu izlaza, koristite StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL razmatranja
- STL pohranjuje samo trokutnu geometriju. Materijali, teksture i hijerarhija scene nisu podržani i odbacuju se pri izvozu.
- STL izvoz ne automatski triangulira. Binarni STL zapisuje samo prva 3 vrha svakog poligonalnog lica; četverokutna i n‑gon lica tiho se skraćuju. ASCII STL zapisuje sve indekse vrhova po licu, što rezultira neispravnim izlazom za lica koja nisu trokuti. Uvijek koristite unaprijed triangulirane mreže (sva lica su trokuti) pri izvozu u STL.
- Binarni STL je znatno manji od ASCII STL-a za velike modele.
- STL je format po izboru kada je cilj 3D pisač ili softver za rezanje (slicer).
glTF: GL Transmission Format
glTF je moderan format dizajniran za učinkovito prijenos i učitavanje 3D sadržaja, posebno na webu i u aplikacijama u stvarnom vremenu. Podržava PBR materijale, hijerarhije scene i animacije.
Učitavanje glTF datoteka
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Spremanje kao glTF
Osnovno spremanje koristi ekstenziju datoteke za određivanje formata:
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
| Metoda | Svrha |
|---|---|
setFlipCoordinateSystem(boolean) | Preokrenite os koordinatnog sustava tijekom izvoza. Korisno pri konverziji iz Y‑gore u Z‑gore ili obrnuto. |
setPrettyPrint(boolean) | Formatirajte izlazni JSON s uvlačenjem radi čitljivosti. Postavite na false za manju veličinu datoteke u produkciji. |
Primjene glTF-a
- Web‑temeljeni 3D preglednici (three.js, Babylon.js).
- Aplikacije u stvarnom vremenu i game enginei.
- Očuvanje PBR definicija materijala između alata.
FBX: Filmbox (samo uvoz)
FBX je vlasnički format tvrtke Autodesk koji se široko koristi u razvoju igara i stvaranju digitalnog 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 datoteke. Prosljeđivanje ASCII FBX datoteke izaziva ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). Hijerarhiju čvorova i izdvajanje materijala iz FBX-a nije u potpunosti provjereno; složene FBX scene možda se neće u potpunosti učitati. Animacije i rigging nisu implementirani.
Učitavanje FBX datoteka
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Pretvaranje FBX‑a u druge formate
Budući da izvoz FBX‑a nije podržan, pretvorite 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);
Primjene FBX‑a
- Uvoz statičkih mesh resursa iz Autodesk alata (Maya, 3ds Max) i njihovo pretvaranje u druge formate.
- Učitavanje binarne FBX geometrije i ponovni izvoz u glTF/GLB, OBJ ili STL.
Skupna konverzija
Uobičajeni tijek rada je pretvaranje cijelog direktorija datoteka iz jednog formata u drugi. Evo obrasca za skupnu 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 direktoriju, pretvara svaku u glTF s lijepo formatiranim izlazom i sprema rezultate. Ovaj obrazac možete prilagoditi za bilo koju kombinaciju izvornog i odredišnog formata.
Referenca za konverziju između formata
Sljedeća tablica prikazuje što možete očekivati pri konverziji između formata.
| Iz | U | Geometrija | Materijali | Hijerarhija | Bilješke |
|---|---|---|---|---|---|
| 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 gdje je moguće |
| STL | OBJ | Sačuvano | Nema | N/A | Nema materijala u izvoru |
| STL | glTF/GLB | Sačuvano | Zadano | Ravno | Primijenjen zadani materijal |
| glTF | OBJ | Sačuvano | Pojednostavljeno | Spljošteno | PBR u osnovni materijal |
| glTF | STL | Sačuvano | Izgubljeno | Spljošteno | Samo geometrija |
| FBX | OBJ | Sačuvano | Pojednostavljeno | Spljošteno | Pojednostavljenje materijala |
| FBX | STL | Sačuvano | Izgubljeno | Izravnato | Samo geometrija |
| FBX | glTF/GLB | Sačuvano | Pretvoreno u PBR | Sačuvano | Dobra vjernost |
Opće smjernice za konverziju
- Geometrija općenito se očuva između parova formata, s jednom važnom iznimkom: pri izvozu u STL, mreže moraju se sastojati isključivo od trokutnih površina. Binary STL tiho skraćuje četverokutne i n‑gon površine na njihove prve 3 verteksa; ASCII STL generira neispravan izlaz za površine koje nisu trokuti.
- Materijali najbolje preživljavaju između glTF i FBX‑uvezanih scena koje uključuju podatke o materijalima. Pretvaranje u STL uvijek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
- Hijerarhija scene se očuva između glTF‑formatnih datoteka. OBJ i STL stvaraju ravne strukture. FBX hijerarhija i ekstrakcija materijala nisu u potpunosti provjereni u ovoj verziji.
Sastavljanje svega zajedno
Evo cjelovitog primjera koji učitava OBJ datoteku, pregledava njene č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 pruža vam dosljedno API‑je kroz više formata. Ključne točke:
- OBJ – jednostavna razmjena mreža s osnovnim materijalima.
- STL – format samo za geometriju za 3D‑printanje.
- glTF / GLB – moderan format koji podržava PBR za web i real‑time upotrebu. Use
GltfSaveOptionswithsetContentType(FileContentType.BINARY)for GLB output. - FBX – import only; rich format for loading assets from game engines and DCC tools.
Koristite klase opcija učitavanja i spremanja specifične za format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kada trebate detaljnu kontrolu nad procesom uvoza ili izvoza.
Za više detalja posjetite Aspose.3D dokumentacija ili pregledajte izvor na GitHub.