Aspose.3D FOSS pour Java prend en charge cinq formats de fichiers 3D : OBJ, STL, glTF, GLB, et FBX (import uniquement).
Tous les exemples utilisent le com.aspose.threed.* package :
import com.aspose.threed.*;
Dépendance Maven :
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Paysage du format
Avant de plonger, voici un aperçu rapide des quatre formats pris en charge et de leurs cas d’utilisation typiques.
| Format | Extension | Importation | Exportation | Support matériel | Hiérarchie de la scène |
|---|---|---|---|---|---|
| OBJ | .obj | Oui | Oui | Basique (fichiers MTL) | Plat |
| STL | .stl | Oui | Oui | Aucun | Plat |
| glTF 2.0 | .gltf | Oui | Oui | PBR | Complet |
| GLB | .glb | Oui | Oui | PBR | Complet |
| FBX | .fbx | Oui | Non | Riche | Complet |
OBJ, STL, glTF et GLB prennent en charge à la fois l’importation et l’exportation. FBX est pris en charge pour importation uniquement. GLB (binary glTF) est produit via GltfSaveOptions avec setContentType(FileContentType.BINARY).
OBJ : Wavefront Object
OBJ est l’un des formats de maillage 3D les plus largement pris en charge. Il stocke la géométrie en texte brut, avec un .mtl fichier compagnon pour les matériaux.
Chargement des fichiers OBJ
L’approche la plus simple consiste à passer le chemin du fichier directement :
Scene scene = Scene.fromFile("model.obj");
Pour plus de contrôle, utilisez ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Lorsque le fichier OBJ référence un fichier MTL (via un mtllib directive), la bibliothèque tentera de charger automatiquement les définitions de matériaux depuis celui‑ci. Le fichier MTL doit se trouver dans le même répertoire que le fichier OBJ ou au chemin indiqué dans la directive.
Enregistrement au format OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Cas d’utilisation d’OBJ
- Échange de données de maillage entre différents outils 3D.
- Importation de modèles depuis des bibliothèques d’actifs qui distribuent au format OBJ.
- Inspection rapide de la géométrie sans hiérarchies de scène complexes.
STL : Stéréolithographie
STL est le format standard pour l’impression 3D. Il représente une géométrie triangulée brute sans matériaux, couleurs ou hiérarchie de scène. Les fichiers STL existent en deux variantes : ASCII (lisible par l’homme) et binaire (compact).
Chargement de fichiers STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Enregistrement au format STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Pour contrôler la sortie, utilisez StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Considérations STL
- Les fichiers STL ne contiennent que de la géométrie triangulée. Les matériaux, les textures et la hiérarchie de la scène sont perdus lors de l’exportation.
- Le STL binaire est nettement plus petit que le STL ASCII pour les grands modèles.
- Le STL est le format privilégié lorsque la cible est une imprimante 3D ou un logiciel de découpe.
glTF : GL Transmission Format
glTF est un format moderne conçu pour la transmission et le chargement efficaces de contenu 3D, en particulier sur le web et dans les applications en temps réel. Il prend en charge les matériaux PBR, les hiérarchies de scène et les animations.
Chargement des fichiers glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Enregistrement au format glTF
L’enregistrement de base utilise l’extension de fichier pour déterminer le format :
scene.save("output.gltf");
Pour un contrôle détaillé, utilisez GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Détails de GltfSaveOptions
| Méthode | Objectif |
|---|---|
setFlipCoordinateSystem(boolean) | Inverser l’axe du système de coordonnées lors de l’exportation. Utile lors de la conversion de Y-up à Z-up ou inversement. |
setPrettyPrint(boolean) | Formater le JSON de sortie avec une indentation pour une meilleure lisibilité. Définir sur false pour une taille de fichier plus petite en production. |
Cas d’utilisation de glTF
- Visionneuses 3D basées sur le Web (three.js, Babylon.js).
- Applications en temps réel et moteurs de jeu.
- Préserver les définitions de matériaux PBR entre les outils.
FBX : Filmbox (Importation uniquement)
FBX est un format propriétaire d’Autodesk largement utilisé dans le développement de jeux et la création de contenu numérique. Il prend en charge des hiérarchies de scène riches, des matériaux et des animations. Aspose.3D FOSS pour Java prend en charge FBX pour importation uniquement – l’exportation vers FBX n’est pas disponible.
Chargement des fichiers FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Conversion de FBX vers d’autres formats
Étant donné que l’exportation FBX n’est pas prise en charge, convertissez les scènes FBX importées en glTF, GLB, OBJ ou STL :
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
Cas d’utilisation de FBX
- Importation d’actifs depuis les outils Autodesk (Maya, 3ds Max) et conversion vers d’autres formats.
- Chargement des personnages articulés et des scènes animées pour une réexportation vers glTF/GLB.
Conversion par lots
Un flux de travail courant consiste à convertir un répertoire complet de fichiers d’un format à un autre. Voici un modèle pour la conversion par 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");
}
}
}
Cela charge chaque .obj fichier d’un répertoire, le convertit en glTF avec une sortie formatée de manière lisible, et enregistre les résultats. Vous pouvez adapter ce modèle à n’importe quelle combinaison de formats source et cible.
Référence de conversion inter‑format
Le tableau suivant montre à quoi s’attendre lors de la conversion entre formats.
| De | À | Géométrie | Matériaux | Hiérarchie | Notes |
|---|---|---|---|---|---|
| OBJ | STL | Conservé | Perdu | N/A | STL ne prend pas en charge les matériaux |
| OBJ | glTF/GLB | Conservé | Converti en PBR | Plat | Matériaux MTL mappés lorsque possible |
| STL | OBJ | Conservé | Aucun | N/A | Aucun matériau dans la source |
| STL | glTF/GLB | Conservé | Par défaut | Plat | Matériau par défaut appliqué |
| glTF | OBJ | Préservé | Simplifié | Aplati | PBR vers matériau de base |
| glTF | STL | Conservé | Perdu | Aplati | Géométrie uniquement |
| FBX | OBJ | Conservé | Simplifié | Aplati | Simplification du matériau |
| FBX | STL | Conservé | Perdu | Aplati | Géométrie uniquement |
| FBX | glTF/GLB | Conservé | Converti en PBR | Conservé | Bonne fidélité |
Lignes directrices générales de conversion
- Géométrie est toujours préservé à travers toutes les paires de formats.
- Matériaux se conservent le mieux entre glTF et FBX, qui prennent tous deux en charge des modèles de matériaux riches. La conversion en STL supprime toujours les matériaux. La conversion en OBJ simplifie les matériaux au modèle MTL de base.
- Hiérarchie de la scène est préservée entre glTF et FBX. OBJ et STL produisent des structures plates.
Mettre tout ensemble
Voici un exemple complet qui charge un fichier OBJ, inspecte ses nœuds et exporte vers glTF et 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.");
}
}
Résumé
Aspose.3D FOSS for Java vous offre une API cohérente à travers plusieurs formats. Les points clés :
- OBJ – échange de maillage simple avec des matériaux de base.
- STL – format uniquement géométrique pour les pipelines d’impression 3D.
- glTF / GLB – format moderne compatible PBR pour le web et l’utilisation en temps réel. Utilisez
GltfSaveOptionsavecsetContentType(FileContentType.BINARY)pour la sortie GLB. - FBX – import uniquement; format riche pour charger des actifs depuis les moteurs de jeu et les outils DCC.
Utilisez les classes d’options de chargement et d’enregistrement spécifiques au format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) lorsque vous avez besoin d’un contrôle granulaire sur le processus d’importation ou d’exportation.
Pour plus de détails, consultez le documentation Aspose.3D ou parcourez le code source sur GitHub.