Cómo guardar escenas 3D en Python
Aspose.3D FOSS para Python te permite salvar un Scene para cualquier formato de salida compatible con un único Scene.save() La detección de formato es automática cuando pasa un camino de archivo; para opciones avanzadas como la salida binaria o el engrosamiento de textura, usted proporciona un objeto de opciones de almacenamiento específicas.
Guía paso a paso
Paso 1: Instalar el paquete
Instalar Aspose.3D FOSS desde PyPI. No se requieren bibliotecas nativas.
asposefoss/3d is not yet published — build from source until it ships. See the project README for build instructions.
Versiones de Python compatibles: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Paso 2: Importar las clases necesarias
Al menos lo que necesitas Scene.Importar la clase de exportación o opciones de ahorro específica del formato sólo cuando necesitas un comportamiento no por defecto.
from aspose.threed import ScenePara opciones específicas de formato:
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, ColladaSaveOptionsPaso 3: Cargar una escena
Cargar una escena existente desde el disco utilizando Scene.from_file().La biblioteca detecta el formato de fuente automáticamente desde la extensión del archivo. Para crear una escena de escarpe en lugar, vea Cómo construir una mezcla en Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativamente, abre una escena con opciones explícitas a través de la Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Paso 4: Salva a STL
llamadas Scene.save() con A .stl por defecto la salida es ASCII STL. Para escribir un STl binario (file menor, no cabecible humano-leable) uso 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)Paso 5: Salva para glTF o GLB
Los archivos GLTF 2.0 pueden exportarse utilizando GltfExporter y GltfSaveOptions.Sitio Set binary_mode = True para producir un contenido propio .glb Bono de la línea; set binary_mode = False Para el JSON-Base .gltf El formato.
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())Paso 6: Salva en FBX
No implementado:
FbxExporter.save()yFbxExporter.save_to_stream()AumentarNotImplementedErrorFBX no está disponible en Aspose.3D FOSS para Python en este momento.Utilice los formatos GLB, OBJ, STL o Collada (DAE) en lugar. ver Pasos 4, 5 y 7 para las opciones de exportación que trabajan.
# The following code raises NotImplementedError in the current release:
# from aspose.threed.formats.fbx import FbxExporter, FbxSaveOptions
# exporter = FbxExporter()
# exporter.save(scene, "output.fbx", options) # raises NotImplementedError
# Use a supported format instead:
scene.save("output.glb") # binary GLB — recommended
scene.save("output.obj") # Wavefront OBJ
scene.save("output.stl") # STLPaso 7: Salva a OBJ o Collada (DAE)
Para OBJ y Collada, pasa el camino de archivo directamente a Scene.save().La biblioteca detecta el formato de la extensión.
# 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)Problemas y soluciones comunes
Ficheos de salida vacíos después scene.save() Esto suele significar que el nodo de raíz del escenario no tiene nodos infantiles con geometría. Verifique que cada nódulo de mezc está anexado a la scene.root_node Antes de llamar save.- Verificar len(scene.root_node.child_nodes) Después de la construcción del escenario.
AttributeError Cuando se construye la geometría de mesh El Mesh las clases se almacena verticales como una lista de puntos de control internos. para los patrones detallados de construcción de mesas, consulte el Cómo construir una mezcla en Python Artículo que cubre la creación de poligonos, elementos verticales y datos UV.
La producción de GLB es más grande que lo esperado GLB binario incluye todos los datos de geometría y textura. si GltfSaveOptions.flip_tex_coord_v Se establece para True, se incluye un paso de coordenado-flip adicional. False Si no necesitas la textura de ácido V.
Exportación de FBX no está disponible en la versión actual FbxExporter.save() Aumentar NotImplementedError.Fbx (cargar) de la entrada .fbx ficheros) funcionan normalmente, pero la exportación a FBX no se implementa. Convertir en GLB, OBJ, STL o Collada en lugar de ello.
El Collada DAE no incluye materiales Sitio ColladaSaveOptions.enable_materials = True (Esto es False por defecto) antes de la exportación.
Preguntas frecuentes
¿Qué formatos puede Aspose.3D FOSS para Python exportar?
La biblioteca soporta la exportación a: STL, glTF 2.0 (text y binario GLB), OBJ, y Collada (DAE). Detección de formato es automática cuando pasa una cinta de ruta de archivo a Scene.save();La biblioteca lee la extensión para seleccionar el exportador correcto.
Nota:Exportación de FBX No se implementó En la actualidad, el lanzamiento -
FbxExporter.save()AumentarNotImplementedError.Utilice GLB, OBJ, STL o Collada en su lugar.
¿Existe una API de exportación en streaming que evita escribir a disco?
Sí sí. GltfExporter.export(scene, stream, options) Escribe a cualquiera io.BytesIO Usted puede pasar el buffer en memoria directamente a una respuesta web o procesamiento adicional sin tocar el sistema de archivos.
¿Cómo puedo convertir una escena de un formato a otro?
Carga la escena con Scene.from_file("input.fbx") y salvar con scene.save("output.gltf").La biblioteca gestiona la conversión en memoria; no se necesitan archivos intermedios.
¿Puedo guardar múltiples subescenas para archivos separados?
Acceso scene.sub_scenes para iterar sobre cada subescena, crear una nueva Scene objeto, adjuntar los nódulos relevantes y llamar save() en cada uno.
¿Qué hace Scene.save() ¿Conseguir el archivo existente en silencio?
Sí. la biblioteca no provoca un error si el archivo objetivo ya existe; lo sobreescribe. añade un verificación de existencia del archivos en su código si necesita proteger contra los sobrecribidos accidentales.