Aspose.3D FOSS per a Java admet cinc formats de fitxer 3D: OBJ, STL, glTF, GLB, i FBX (només importació).
Tots els exemples utilitzen el com.aspose.threed.* paquet:
import com.aspose.threed.*;
Dependència Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Paisatge de format
Abans d’endinsar-nos, aquí teniu una breu visió general dels quatre formats compatibles i els seus casos d’ús típics.
| Format | Extensió | Importa | Exporta | Suport de material | Jerarquia d’escena |
|---|---|---|---|---|---|
| OBJ | .obj | Sí | Sí | Bàsic (fitxers MTL) | Pla |
| STL | .stl | Sí | Sí | Cap | Pla |
| glTF 2.0 | .gltf | Sí | Sí | PBR | Complet |
| GLB | .glb | Sí | Sí | PBR | Complet |
| FBX | .fbx | Sí | No | Ric | Complet |
OBJ, STL, glTF i GLB admeten tant importació com exportació. FBX és compatible per a només importació. GLB (binary glTF) es produeix via GltfSaveOptions amb setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ és un dels formats de malla 3D més àmpliament compatibles. Emmagatzema la geometria com a text pla, amb un opcional .mtl fitxer complementari per a materials.
Carregant fitxers OBJ
L’enfocament més senzill és passar la ruta del fitxer directament:
Scene scene = Scene.fromFile("model.obj");
Per a més control, utilitzeu ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Quan el fitxer OBJ fa referència a un fitxer MTL (a través d’un mtllib directiva), la biblioteca intentarà carregar les definicions de material des d’ell automàticament. El fitxer MTL ha d’estar al mateix directori que el fitxer OBJ o al camí especificat a la directiva.
Desant com a OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Casos d’ús d’OBJ
- Intercanvi de dades de malla entre diferents eines 3D.
- Importació de models des de biblioteques d’actius que es distribueixen en format OBJ.
- Inspecció ràpida de la geometria sense jerarquies de escena complexes.
STL: Estereolitografia
STL és el format estàndard per a la impressió 3D. Representa geometria triangulada en brut sense materials, colors ni jerarquia d’escena. Els fitxers STL vénen en dues variants: ASCII (legible per a humans) i binari (compacte).
Carregant fitxers STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Desant com a STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Per controlar la sortida, utilitzeu StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Consideracions STL
- Els fitxers STL contenen només geometria triangulada. Els materials, textures i la jerarquia de l’escena es perden durant l’exportació.
- El STL binari és significativament més petit que el STL ASCII per a models grans.
- STL és el format preferit quan l’objectiu és una impressora 3D o un programari de laminació.
glTF: Format de Transmissió GL
glTF és un format modern dissenyat per a una transmissió i càrrega eficients de contingut 3D, especialment al web i en aplicacions en temps real. Admet materials PBR, jerarquies d’escena i animacions.
Carregant fitxers glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Desant com a glTF
L’enregistrament bàsic utilitza l’extensió del fitxer per determinar el format:
scene.save("output.gltf");
Per a un control detallat, utilitzeu GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Detalls de GltfSaveOptions
| Mètode | Propòsit |
|---|---|
setFlipCoordinateSystem(boolean) | Inverteix l’eix del sistema de coordenades durant l’exportació. És útil quan es converteix de Y-up a Z-up o viceversa. |
setPrettyPrint(boolean) | Formata el JSON de sortida amb sagnat per a una millor llegibilitat. Estableix a false per a una mida de fitxer més petita en producció. |
Casos d’ús de glTF
- Visors 3D basats en web (three.js, Babylon.js).
- Aplicacions en temps real i motors de joc.
- Conservant les definicions de materials PBR entre eines.
FBX: Filmbox (Només importació)
FBX és un format propietari d’Autodesk que s’utilitza àmpliament en el desenvolupament de jocs i la creació de contingut digital. Admet jerarquies d’escena riques, materials i animacions. Aspose.3D FOSS per a Java admet FBX per a només per a importació – l’exportació a FBX no està disponible.
Carregant fitxers FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Convertint FBX a altres formats
Com que l’exportació de FBX no està suportada, convertiu les escenes FBX importades a glTF, GLB, OBJ o STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Casos d’ús de FBX
- Importació d’actius des d’eines d’Autodesk (Maya, 3ds Max) i conversió a altres formats.
- Carregant personatges amb esquelet i escenes animades per a reexportar a glTF/GLB.
Conversió per lots
Un flux de treball comú consisteix a convertir tot un directori de fitxers d’un format a un altre. Aquí teniu un patró per a la conversió per lots:
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");
}
}
}
Això carrega cada .obj fitxer d’un directori, converteix cada un a glTF amb sortida formatada bonament i desa els resultats. Pots adaptar aquest patró per a qualsevol combinació de format d’origen i destí.
Referència de conversió entre formats
La taula següent mostra què esperar en convertir entre formats.
| Des de | A | Geometria | Materials | Jerarquia | Notes |
|---|---|---|---|---|---|
| OBJ | STL | Conservat | Perdut | N/A | STL no té suport de material |
| OBJ | glTF/GLB | Conservat | Convertit a PBR | Pla | Materials MTL assignats on sigui possible |
| STL | OBJ | Conservat | Cap | N/A | No hi ha materials a la font |
| STL | glTF/GLB | Conservat | Per defecte | Pla | S’ha aplicat el material per defecte |
| glTF | OBJ | Conservat | Simplificat | Aplanat | PBR a material bàsic |
| glTF | STL | Conservat | Perdut | Aplanat | Només geometria |
| FBX | OBJ | Conservat | Simplificat | Aplanat | Simplificació de material |
| FBX | STL | Conservat | Perdut | Aplanat | Només geometria |
| FBX | glTF/GLB | Conservat | Convertit a PBR | Conservat | Bona fidelitat |
Directrius generals de conversió
- Geometria sempre es conserva en totes les parelles de formats.
- Materials sobreviuen millor entre glTF i FBX, que ambdós admeten models de material rics. Convertir a STL sempre elimina els materials. Convertir a OBJ simplifica els materials al model bàsic MTL.
- Jerarquia d’escena es conserva entre glTF i FBX. OBJ i STL produeixen estructures planes.
Posant-ho tot junt
Aquí teniu un exemple complet que carrega un fitxer OBJ, inspecciona els seus nodes i exporta tant a glTF com a 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.");
}
}
Resum
Aspose.3D FOSS for Java us ofereix una API coherent a través de diversos formats. Els punts clau:
- OBJ – intercanvi simple de malles amb materials bàsics.
- STL – format només de geometria per a canals de impressió 3D.
- glTF / GLB – format modern amb capacitat PBR per a ús web i en temps real. Utilitzeu
GltfSaveOptionsambsetContentType(FileContentType.BINARY)per a la sortida GLB. - FBX – només importació; format ric per carregar actius des de motors de joc i eines DCC.
Utilitzeu classes d’opcions de càrrega i desament específiques del format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) quan necessiteu un control detallat sobre el procés d’importació o exportació.
Per a més detalls, visiteu el Aspose.3D documentació o navegueu el codi font a GitHub.