Como salvar cenas 3D em Python
Aspose.3D FOSS para Python permite que você salve um Scene para qualquer formato de saída suportado usando um único Scene.save() Detecção de formato é automatizada quando você passa um caminho de arquivo; para opções avançadas como saída binária ou textura inserida, você fornece um objeto de opcoes de armazenamento específico do formato.
Guia passo a passo
Passo 1: Instale o pacote
Instale o Aspose.3D FOSS da PyPI. Não são necessárias bibliotecas nativas.
pip install aspose-3d-fossVersões de Python suportadas: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Passo 2: Importar as classes necessárias
Ao mínimo que você precisa Scene.Importar a classe de exportador ou opções de poupança específicas do formato apenas quando você precisa de comportamento não-default.
from aspose.threed import ScenePara opções 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, ColladaSaveOptionsPasso 3: Carregar uma cena
Carregar uma cena existente do disco usando Scene.from_file().A biblioteca detecta o formato fonte automaticamente da extensão de arquivo. para criar uma cena do escudo, ver Como construir uma mesha em Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")Alternativamente, abra uma cena com opções explícitas através de Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Passo 4: Salve para STL
Chamado Scene.save() com a .stl Por padrão, a saída é ASCII STL. Para escrever um binário ST L (file menor, nenhum cabeçalho humano-leável) 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)Passo 5: Save para GLTF ou GLB
Os arquivos GLTF 2.0 podem ser exportados usando o GltfExporter e GltfSaveOptions.- Set binary_mode = True Para produzir um conteúdo autônomo .glb Bandeira binária; Set binary_mode = False Para a base JSON .gltf O 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())Passo 6: Salve para FBX
Não implementado:
FbxExporter.save()eFbxExporter.save_to_stream()AumentoNotImplementedErrorExportação FBX não está disponível em Aspose.3D FOSS para Python neste momento.Use os formatos GLB, OBJ, STL ou Collada (DAE) em vez disso. ver Passos 4, 5 e 7 para opções de exportação trabalhando.
# 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") # STLPasso 7: Save to OBJ ou Collada (DAE)
Para OBJ e Collada, passe o caminho de arquivo diretamente para Scene.save().A biblioteca detecta o formato da extensão.
# 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 comuns e fixos
Ficheiro de saída vazio após scene.save() Isso geralmente significa que o nodo de raiz da cena não tem nodos infantis com geometria. Verifique se cada nódulo de mesh foi ligado a um scene.root_node Antes de chamar save.Verificação len(scene.root_node.child_nodes) Depois de construir a cena.
AttributeError Quando construir a geometria de mesh O que Mesh As classes de lojas verticais como uma lista de pontos de controle internos.Para padrões detalhados de construção da mesha, consulte o Como construir uma mesha em Python Artigo que cobre a criação de poligônios, elementos verticais e dados UV.
O PIB é maior do que o esperado O GLB binário inclui todos os dados de geometria e textura. GltfSaveOptions.flip_tex_coord_v Está estabelecido para True, um pass de coordenado-flip adicional é incluído. False Se você não precisa de textura V-axis.
Exportação do FBX não está disponível no lançamento atual FbxExporter.save() Aumento NotImplementedError.Fbx Import (carregar) .fbx arquivos) funcionam normalmente, mas a exportação para FBX não é implementada. Converter para GLB, OBJ, STL ou Collada em vez disso.
A CALTA DAE não inclui materiais Setagem ColladaSaveOptions.enable_materials = True (Ele é False por default) antes da exportação.
Perguntas frequentes
Quais formatos podem Aspose.3D FOSS para exportação de Python?
A biblioteca suporta a exportação para: STL, glTF 2.0 (text e binário GLB), OBJ e Collada (DAE).A detecção de formato é automática quando você passa uma linha de arquivo-caminho para Scene.save();A biblioteca lê a extensão para selecionar o exportador certo.
Notícia:Exportação do FBX Não implementado Na atual edição -
FbxExporter.save()AumentoNotImplementedError.Use GLB, OBJ, STL ou Collada em vez disso.
Existe uma API de exportação em streaming que evita escrever para o disco?
Sim sim. GltfExporter.export(scene, stream, options) Escreva para qualquer io.BytesIO Você pode passar o buffer de memória diretamente para uma resposta web ou processamento adicional sem tocar o sistema de arquivos.
Como posso converter uma cena de um formato para outro?
Carregue a cena com Scene.from_file("input.fbx") e salvar com scene.save("output.gltf").A biblioteca gerencia a conversão em memória; não são necessários arquivos intermediários.
Posso salvar várias subescenas para arquivos separados?
Acesso scene.sub_scenes para iterar sobre cada subscena, criar uma nova Scene objetos, ligar os nódulos relevantes e chamar save() em cada um.
O que faz Scene.save() Aplicar arquivos existentes em silêncio?
Sim. a biblioteca não aumenta um erro se o arquivo alvo já existe; ele o sobreescreve. adicione uma verificação de existência do arquivos em seu código se você precisa proteger contra os sobrescreves aleatórios.