Aspose.3D FOSS pentru Java suportă cinci formate de fișiere 3D: OBJ, STL, glTF, GLB, și FBX (doar import).
Toate exemplele folosesc com.aspose.threed.* pachetul:
import com.aspose.threed.*;
Dependență Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Peisajul formatelor
Înainte de a începe, iată o scurtă prezentare a celor patru formate suportate și a cazurilor lor tipice de utilizare.
| Format | Extensie | Import | Export | Suport material | Ierarhia scenei |
|---|---|---|---|---|---|
| OBJ | .obj | Da | Da | De bază (fișiere MTL) | Plat |
| STL | .stl | Da | Da | Nimic | Plat |
| glTF 2.0 | .gltf | Da | Da | PBR | Complet |
| GLB | .glb | Da | Da | PBR | Complet |
| FBX | .fbx | Da | Nu | Bogătos | Complet |
OBJ, STL, glTF și GLB suportă atât importul, cât și exportul. FBX este suportat pentru doar import. GLB (binary glTF) este produs prin GltfSaveOptions cu setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ este unul dintre cele mai răspândite formate de rețea 3D. Stochează geometria ca text simplu, cu un opțional .mtl fișier însoțitor pentru materiale.
Încărcarea fișierelor OBJ
Cea mai simplă abordare este să transmiteți calea fișierului direct:
Scene scene = Scene.fromFile("model.obj");
Pentru un control mai mare, utilizați ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Când fișierul OBJ face referire la un fișier MTL (printr-un mtllib directivă), biblioteca va încerca să încarce automat definițiile de material din acesta. Fișierul MTL ar trebui să fie în același director cu fișierul OBJ sau la calea specificată în directivă.
Salvare ca OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Cazuri de utilizare OBJ
- Schimbarea datelor de plasă între diferite instrumente 3D.
- Importarea modelelor din bibliotecile de active care distribuie în format OBJ.
- Inspecție rapidă a geometriei fără ierarhii de scenă complexe.
STL: Stereolitografie
STL este formatul standard pentru imprimarea 3D. Reprezintă geometrie triunghiulară brută fără materiale, culori sau ierarhie de scenă. Fișierele STL vin în două variante: ASCII (citibil de om) și binar (compact).
Încărcarea fișierelor STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Salvare ca STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Pentru a controla ieșirea, utilizați StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Considerații STL
- Fișierele STL conțin doar geometrie triunghiulară. Materialele, texturile și ierarhia scenei se pierd în timpul exportului.
- STL binar este semnificativ mai mic decât STL ASCII pentru modele mari.
- STL este formatul preferat atunci când ținta este o imprimantă 3D sau un software de feliere.
glTF: Format de Transmisie GL
glTF este un format modern conceput pentru transmiterea și încărcarea eficientă a conținutului 3D, în special pe web și în aplicații în timp real. Suportă materiale PBR, ierarhii de scenă și animații.
Încărcarea fișierelor glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Salvare ca glTF
Salvarea de bază folosește extensia fișierului pentru a determina formatul:
scene.save("output.gltf");
Pentru un control detaliat, utilizați GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Detalii GltfSaveOptions
| Metodă | Scop |
|---|---|
setFlipCoordinateSystem(boolean) | Inversează axa sistemului de coordonate în timpul exportului. Util pentru conversia de la Y-up la Z-up sau invers. |
setPrettyPrint(boolean) | Formatează JSON‑ul de ieșire cu indentare pentru lizibilitate. Setează la false pentru dimensiune de fișier mai mică în producție. |
Cazuri de utilizare glTF
- Vizualizatoare 3D bazate pe web (three.js, Babylon.js).
- Aplicații în timp real și motoare de jocuri.
- Păstrarea definițiilor de materiale PBR între diferite instrumente.
FBX: Filmbox (Numai import)
FBX este un format proprietar de la Autodesk, utilizat pe scară largă în dezvoltarea de jocuri și crearea de conținut digital. Suportă ierarhii de scenă complexe, materiale și animații. Aspose.3D FOSS pentru Java suportă FBX pentru doar import – exportul către FBX nu este disponibil.
Încărcarea fișierelor FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Convertirea FBX în alte formate
Deoarece exportul FBX nu este suportat, convertiți scenele FBX importate în glTF, GLB, OBJ sau STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Cazuri de utilizare FBX
- Importarea de active din instrumentele Autodesk (Maya, 3ds Max) și convertirea în alte formate.
- Se încarcă personaje rigate și scene animate pentru reexportare în glTF/GLB.
Conversie în lot
Un flux de lucru comun este convertirea unui întreg director de fișiere dintr-un format în altul. Iată un model pentru conversia în lot:
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");
}
}
}
Acesta încarcă fiecare .obj fișier dintr-un director, convertește fiecare în glTF cu ieșire formatată frumos și salvează rezultatele. Poți adapta acest model pentru orice combinație de format sursă și destinație.
Referință pentru conversia între formate
Tabelul de mai jos arată la ce să te aștepți când convertești între formate.
| De la | Către | Geometrie | Materiale | Ierarhie | Note |
|---|---|---|---|---|---|
| OBJ | STL | Păstrat | Pierdut | N/A | STL nu are suport pentru materiale |
| OBJ | glTF/GLB | Păstrat | Convertit în PBR | Plat | Materiale MTL mapate acolo unde este posibil |
| STL | OBJ | Păstrat | Nimic | N/A | Niciun material în sursă |
| STL | glTF/GLB | Păstrat | Implicit | Plat | Material implicit aplicat |
| glTF | OBJ | Păstrat | Simplificat | Aplatizat | PBR la material de bază |
| glTF | STL | Păstrat | Pierdut | Aplatizat | Doar geometrie |
| FBX | OBJ | Păstrat | Simplificat | Aplatizat | Simplificare materială |
| FBX | STL | Păstrat | Pierdut | Aplatizat | Doar geometrie |
| FBX | glTF/GLB | Păstrat | Convertit la PBR | Păstrat | Fidelitate bună |
Ghiduri generale de conversie
- Geometrie este întotdeauna păstrată în toate perechile de formate.
- Materiale rezistă cel mai bine între glTF și FBX, ambele susțin modele de materiale bogate. Conversia în STL elimină întotdeauna materialele. Conversia în OBJ simplifică materialele la modelul de bază MTL.
- Ierarhia scenei este păstrată între glTF și FBX. OBJ și STL produc structuri plate.
Punând totul împreună
Iată un exemplu complet care încarcă un fișier OBJ, inspectează nodurile sale și exportă atât în glTF, cât și în 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.");
}
}
Rezumat
Aspose.3D FOSS for Java îți oferă un API consistent pe multiple formate. Punctele cheie:
- OBJ – schimb simplu de mesh-uri cu materiale de bază.
- STL – format doar pentru geometrie, destinat fluxurilor de imprimare 3D.
- glTF / GLB – format modern capabil PBR pentru utilizare pe web și în timp real. Utilizați
GltfSaveOptionscusetContentType(FileContentType.BINARY)pentru ieșire GLB. - FBX – doar import; format bogat pentru încărcarea activelor din motoarele de joc și instrumentele DCC.
Utilizați clasele de opțiuni de încărcare și salvare specifice formatului (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) când aveți nevoie de un control detaliat asupra procesului de import sau export.
Pentru mai multe detalii, vizitați Aspose.3D documentație sau navigați sursa pe GitHub.