Como salvar cenas 3D em Python

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-foss

Versõ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 Scene

Para 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, ColladaSaveOptions

Passo 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() e FbxExporter.save_to_stream() Aumento NotImplementedError Exportaçã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")   # STL

Passo 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() Aumento NotImplementedError.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.

Veja também

 Português