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 slučajeva upotrebe.
| 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 (binary glTF) se proizvodi putem GltfSaveOptions s setContentType(FileContentType.BINARY).
OBJ: Wavefront objekt
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 formata
- Razmjena podataka o mreži 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 ispis. Predstavlja sirovu trianguliranu geometriju bez materijala, boja ili hijerarhije scene. STL datoteke dolaze u dvije varijante: ASCII (čovjeku čitljivo) i binarne (kompaktne).
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, upotrijebite StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
STL razmatranja
- STL datoteke sadrže samo trianguliranu geometriju. Materijali, teksture i hijerarhija scene gube se pri izvozu.
- 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.
glTF: GL Transmission Format
glTF je moderan format dizajniran za učinkovit prijenos i učitavanje 3D sadržaja, posebno na webu i u aplikacijama u stvarnom vremenu. Podržava PBR materijale, hijerarhije scena 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, upotrijebite 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 pretvaranju 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. |
Primjeri upotrebe glTF
- Web‑temeljeni 3D preglednici (three.js, Babylon.js).
- Aplikacije u stvarnom vremenu i game enginei.
- Čuvanje PBR definicija materijala kroz alate.
FBX: Filmbox (Samo uvoz)
FBX je vlasnički format tvrtke Autodesk koji se široko koristi u razvoju igara i stvaranju digitalnog 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 datoteka
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Pretvaranje FBX u druge formate
Budući da izvoz FBX 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 sredstava iz Autodesk alata (Maya, 3ds Max) i pretvaranje u druge formate.
- Učitavanje rigiranih likova i animiranih scena za ponovni izvoz u glTF/GLB.
Serijska konverzija
Uobičajeni tijek rada je pretvaranje cijelog direktorija datoteka s jednog formata na drugi. Evo obrasca za serijsku 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. Možete prilagoditi ovaj uzorak 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 | Nijedan | N/A | Nema materijala u izvoru |
| STL | glTF/GLB | Sačuvano | Zadano | Ravno | Primijenjen zadani materijal |
| glTF | OBJ | Sačuvano | Pojednostavljeno | Izravnano | 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 | Spljošteno | Samo geometrija |
| FBX | glTF/GLB | Sačuvano | Pretvoreno u PBR | Sačuvano | Dobra vjernost |
Opće smjernice za konverziju
- Geometrija uvijek se očuva u svim parovima formata.
- Materijali najbolje se očuvaju između glTF i FBX, koji oba podržavaju bogate modele materijala. Pretvaranje u STL uvijek uklanja materijale. Pretvaranje u OBJ pojednostavljuje materijale na osnovni MTL model.
- Hijerarhija scene se očuva između glTF i FBX. OBJ i STL stvaraju ravne strukture.
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 for Java daje vam dosljedni API kroz više formata. Ključne točke:
- OBJ – jednostavna razmjena mreža s osnovnim materijalima.
- STL – format samo za geometriju za 3D tiskanje.
- glTF / GLB – moderan format koji podržava PBR za web i real-time upotrebu. Koristite
GltfSaveOptionsssetContentType(FileContentType.BINARY)za GLB izlaz. - FBX – samo uvoz; bogati format za učitavanje sredstava iz game enginea i DCC alata.
Koristite klase opcija učitavanja i spremanja specifične za format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) kada trebate finu kontrolu nad procesom uvoza ili izvoza.
Za više detalja, posjetite Aspose.3D dokumentaciju ili pregledajte izvor na GitHub.