Comment enregistrer des scènes 3D en Python
Aspose.3D FOSS for Python vous permet d’enregistrer un Scene dans n’importe quel format de sortie pris en charge en utilisant un seul appel Scene.save(). La détection du format est automatique lorsque vous passez un chemin de fichier ; pour des options avancées telles que la sortie binaire ou l’intégration de textures, vous fournissez un objet d’options d’enregistrement spécifique au format.
Guide étape par étape
Étape 1 : Installer le package
Installez Aspose.3D FOSS depuis PyPI. Aucune bibliothèque native n’est requise.
pip install aspose-3d-fossVersions Python prises en charge : 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Étape 2 : Importer les classes requises
Au minimum, vous avez besoin de Scene. Importez l’exportateur spécifique au format ou la classe d’options d’enregistrement uniquement lorsque vous avez besoin d’un comportement non par défaut.
from aspose.threed import ScenePour les options spécifiques au format :
from aspose.threed.formats.gltf import GltfSaveOptions, GltfExporter
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptionsÉtape 3 : Charger une scène
Chargez une scène existante depuis le disque en utilisant Scene.from_file(). La bibliothèque détecte automatiquement le format source à partir de l’extension du fichier. Pour créer une scène à partir de zéro à la place, consultez Comment créer un maillage en Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Sinon, ouvrez une scène avec des options explicites via Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Étape 4 : Enregistrer au format STL
Appelez Scene.save() avec un chemin .stl. Par défaut, la sortie est un STL ASCII. Pour écrire un STL binaire (fichier plus petit, pas d’en‑tête lisible par l’homme), utilisez StlSaveOptions.
# ASCII STL — format detected from the .stl extension
scene.save("output.stl")
# Binary STL — smaller file size
from aspose.threed.formats.stl import StlFormat, StlSaveOptions
stl_format = StlFormat()
options = stl_format.create_save_options()
options.binary_mode = True
scene.save("output_binary.stl", options)Étape 5 : Enregistrer au format glTF ou GLB
Les fichiers GLTF 2.0 peuvent être exportés à l’aide de GltfExporter et GltfSaveOptions. Définissez binary_mode = True pour produire un paquet binaire .glb autonome ; définissez binary_mode = False pour le format .gltf basé sur JSON.
import io
from aspose.threed.formats.gltf import GltfExporter, GltfSaveOptions
# Text glTF
options = GltfSaveOptions()
options.binary_mode = False
options.file_name = "output.gltf"
exporter = GltfExporter()
with open("output.gltf", "wb") as f:
stream = io.BytesIO()
exporter.export(scene, stream, options)
f.write(stream.getvalue())
# Binary GLB
options_glb = GltfSaveOptions()
options_glb.binary_mode = True
options_glb.file_name = "output.glb"
stream_glb = io.BytesIO()
exporter.export(scene, stream_glb, options_glb)
with open("output.glb", "wb") as f:
f.write(stream_glb.getvalue())Étape 6 : Enregistrer au format FBX
Les scènes FBX sont exportées via FbxExporter. Utilisez FbxSaveOptions pour activer la compression ou intégrer les textures dans le fichier de sortie.
from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
options = FbxSaveOptions()
options.enable_compression = True
options.embed_textures = False # keep textures as separate files
exporter = FbxExporter()
exporter.save(scene, "output.fbx", options)Étape 7 : Enregistrer au format OBJ ou Collada (DAE)
Pour OBJ et Collada, transmettez le chemin du fichier directement à Scene.save(). La bibliothèque détecte le format à partir de l’extension.
# OBJ — format auto-detected from .obj extension
scene.save("output.obj")
# Collada DAE — with material and coordinate-system options
from aspose.threed.formats.collada import ColladaExporter, ColladaSaveOptions
options = ColladaSaveOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.indented = True
exporter = ColladaExporter()
exporter.export(scene, open("output.dae", "wb"), options)Problèmes courants et solutions
Fichier de sortie vide après scene.save()
Cela signifie généralement que le nœud racine de la scène n’a aucun nœud enfant contenant de la géométrie. Vérifiez que chaque nœud maillage a été attaché à scene.root_node avant d’appeler save. Vérifiez len(scene.root_node.child_nodes) après la construction de la scène.
AttributeError lors de la création de la géométrie du maillage
La classe Mesh stocke les sommets dans une liste interne de points de contrôle. Pour des modèles détaillés de construction de maillage, consultez l’article How to Build a Mesh in Python qui couvre la création de polygones, les éléments de sommet et les données UV.
GLB output is larger than expected
Le GLB binaire intègre toutes les données de géométrie et de texture. Si GltfSaveOptions.flip_tex_coord_v est réglé sur True, un passage supplémentaire d’inversion de coordonnées est inclus. Réglez-le sur False si vous n’avez pas besoin d’inverser la texture sur l’axe V.
Le cycle d’import/export FBX perd les matériaux
L’exportation des matériaux FBX est contrôlée par FbxSaveOptions.export_legacy_material_properties. Réglez-la sur True pour écrire des blocs de matériaux FBX standard que les outils tiers peuvent lire.
Collada DAE n’inclut pas les matériaux
Définissez ColladaSaveOptions.enable_materials = True (c’est False par défaut) avant l’exportation.
Foire aux questions
Quels formats Aspose.3D FOSS pour Python peut‑il exporter ?
La bibliothèque prend en charge l’exportation vers : STL, glTF 2.0 (texte et binaire GLB), FBX, OBJ, Collada (DAE) et 3MF. La détection du format est automatique lorsque vous transmettez une chaîne de chemin de fichier à Scene.save() ; la bibliothèque lit l’extension pour sélectionner l’exportateur approprié.
Existe-t-il une API d’exportation en streaming qui évite d’écrire sur le disque ?
Oui. GltfExporter.export(scene, stream, options) écrit vers n’importe quel io.BytesIO ou objet de type fichier. Vous pouvez transmettre le tampon en mémoire directement à une réponse web ou à un traitement ultérieur sans toucher au système de fichiers.
Comment convertir une scène d’un format à un autre ?
Chargez la scène avec Scene.from_file("input.fbx") et enregistrez‑la avec scene.save("output.gltf"). La bibliothèque gère la conversion en mémoire ; aucun fichier intermédiaire n’est nécessaire.
Puis-je enregistrer plusieurs sous‑scènes dans des fichiers séparés ?
Accédez à scene.sub_scenes pour parcourir chaque sous‑scène, créez un nouvel objet Scene, attachez les nœuds pertinents et appelez save() sur chacun.
Scene.save() écrase-t-il les fichiers existants silencieusement ?
Oui. La bibliothèque ne génère pas d’erreur si le fichier cible existe déjà ; elle le remplace. Ajoutez une vérification de l’existence du fichier dans votre code si vous devez vous prémunir contre les écrasements accidentels.