Kuinka tallentaa 3D-kohtaukset Pythonissa

Kuinka tallentaa 3D-kohtaukset Pythonissa

Aspose.3D FOSS for Python antaa sinun tallentaa Scene mihin tahansa tuettuun lähtömuotoon käyttämällä yhtä Scene.save()-kutsua. Muodon tunnistus on automaattinen, kun annat tiedostopolun; edistyneitä vaihtoehtoja, kuten binaarinen tuloste tai tekstuurin upotus, varten toimitat formaattiin perustuvan tallennusasetusten objektin.

Vaiheittainen opas

Vaihe 1: Asenna paketti

Asenna Aspose.3D FOSS PyPI:stä. Natiivikirjastoja ei vaadita.

pip install aspose-3d-foss

Tuetut Python-versiot: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.


Vaihe 2: Tarvittavien luokkien tuonti

Vähintään tarvitset Scene. Tuo formaattikohtainen vienti‑ tai tallennusasetusten luokka vain, kun tarvitset ei‑oletuskäyttäytymistä.

from aspose.threed import Scene

Formaattikohtaiset asetukset:

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

Vaihe 3: Lataa kohtaus

Lataa olemassa oleva kohtaus levystä käyttäen Scene.from_file(). Kirjasto havaitsee lähdeformaatin automaattisesti tiedostopäätteestä. Jos haluat sen sijaan rakentaa kohtauksen alusta alkaen, katso Kuinka rakentaa verkko Pythonissa.

# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")

Vaihtoehtoisesti avaa kohtaus eksplisiittisillä asetuksilla Scene.open():n kautta:

from aspose.threed import Scene

scene = Scene()
scene.open("input.fbx")

Vaihe 4: Tallenna STL-muotoon

Kutsu Scene.save() .stl-polulla. Oletuksena tuloste on ASCII STL. Kirjoittaaksesi binäärisen STL:n (pienempi tiedosto, ei ihmisen luettavissa oleva otsikko) käytä 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)

Vaihe 5: Tallenna glTF- tai GLB-muotoon

GLTF 2.0 -tiedostoja voidaan viedä käyttämällä GltfExporter ja GltfSaveOptions. Aseta binary_mode = True tuottamaan itsenäinen .glb binaaripaketti; aseta binary_mode = False JSON-pohjaista .gltf -muotoa varten.

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())

Vaihe 6: Tallenna FBX-muotoon

FBX‑kohtaukset viedään FbxExporter-toiminnolla. Käytä FbxSaveOptions-toimintoa ottaaksesi käyttöön pakkaamisen tai upottaaksesi tekstuurit tulostetiedostoon.

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)

Vaihe 7: Tallenna OBJ- tai Collada (DAE)

OBJ- ja Collada-tiedostoille syötä tiedostopolku suoraan Scene.save():lle. Kirjasto havaitsee formaatin tiedostopäätteestä.

# 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)

Yleisiä ongelmia ja korjauksia

Tyhjä tulostiedosto scene.save() jälkeen
Tämä yleensä tarkoittaa, että scene‑juurisolmussa ei ole lapsisolmuja, joissa on geometriaa. Varmista, että jokainen mesh node on liitetty scene.root_node:een ennen kuin kutsut save. Tarkista len(scene.root_node.child_nodes) scene‑rakentamisen jälkeen.

AttributeError kun rakennetaan verkon geometriaa Mesh-luokka tallentaa kärjet sisäisen ohjauspisteiden listana. Lisätietoja verkon rakennuskuvioista saat artikkelista Kuinka rakentaa verkko Pythonilla, jossa käsitellään monikulmioiden luomista, kärki‑elementtejä ja UV‑tietoja.

GLB-tuloste on odotettua suurempi
Binäärinen GLB upottaa kaiken geometria- ja tekstuuridatan. Jos GltfSaveOptions.flip_tex_coord_v on asetettu arvoon True, mukaan sisällytetään ylimääräinen koordinaattien kääntövaihe. Aseta se arvoon False, jos et tarvitse V-akselin tekstuurin kääntämistä.

FBX-tuonti/viennin kierros menettää materiaalit
FBX-materiaalin vientiä ohjaa FbxSaveOptions.export_legacy_material_properties. Aseta tämä True:ksi kirjoittaaksesi standardit FBX-materiaalilohkot, jotka kolmannen osapuolen työkalut voivat lukea.

Collada DAE ei sisällä materiaaleja
Aseta ColladaSaveOptions.enable_materials = True (se on oletuksena False) ennen vientiä.

Usein kysytyt kysymykset

Mitä formaatteja Aspose.3D FOSS for Python voi viedä?

Kirjasto tukee vientiä: STL, glTF 2.0 (teksti- ja binäärinen GLB), FBX, OBJ, Collada (DAE) ja 3MF. Muodon tunnistus on automaattinen, kun annat tiedostopolun merkkijonon Scene.save(); kirjasto lukee tiedostopäätteen valitakseen oikean exporter.

Onko olemassa suoratoisto‑vientirajapintaa, joka välttää levylle kirjoittamista?

Kyllä. GltfExporter.export(scene, stream, options) kirjoittaa mihin tahansa io.BytesIO‑ tai tiedostomaiseen objektiin. Voit välittää muistissa olevan puskurin suoraan web‑vastaukseen tai jatkokäsittelyyn koskematta tiedostojärjestelmään.

Kuinka konvertoin kohtauksen yhdestä formaatista toiseen?

Lataa kohtaus Scene.from_file("input.fbx"):lla ja tallenna scene.save("output.gltf"):lla. Kirjasto käsittelee muunnoksen muistissa; välitiedostoja ei tarvita.

Voinko tallentaa useita aliskenaarioita erillisiin tiedostoihin?

Käytä scene.sub_scenes jokaisen alinäytön läpikäymiseen, luo uusi Scene-objekti, liitä asiaankuuluvat solmut ja kutsu save() jokaisessa.

Korvaa Scene.save() olemassa olevat tiedostot hiljaisesti?

Kyllä. Kirjasto ei nosta virhettä, jos kohdetiedosto on jo olemassa; se korvaa sen. Lisää tiedoston olemassaolon tarkistus koodissasi, jos sinun täytyy suojautua tahattomilta korvauksilta.

Katso myös

 Suomi