Как да се съхраняват 3D сцени в Python
Aspose.3D FOSS за Python ви позволява да спестите Scene за всеки поддържан формат на изхода, като се използва единствен Scene.save() Форматът се открива автоматично, когато преминавате по пътя на файла; за напреднали опции като бинарни изходи или текстура вграждане, вие предлагате формат-специфичен запаметяване опциите обект.
Стъпка по стъпка ръководство
Стъпка 1: Инсталирайте пакета
Инсталирайте Aspose.3D FOSS от PyPI. Няма нужни библиотеки на роднини.
pip install aspose-3d-fossПоддръжните версии на Python: 3.7, 3.8, 3.9, 3.10, 3.11, 3.12.
Стъпка 2: Внос на необходимите класове
По минимум, когато се нуждаете от Scene.Внос на формат-специфичен експортер или класата за съхранение опции само когато се нуждаете от непредвидено поведение.
from aspose.threed import SceneЗа формат-специфични опции:
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Стъпка 3: Изтеглете сцена
Изтегляне на съществуваща сцена от диска с помощта на Scene.from_file().Библиотеката открива източника формат автоматично от разширяването на файла. за да се изгради сцена от скратено вместо това, вижте Как да създадете меша в Python.
# Load from an existing file — format auto-detected from extension
scene = Scene.from_file("input.obj")В противен случай, отворете сцена с експлицитни опции чрез Scene.open():
from aspose.threed import Scene
scene = Scene()
scene.open("input.fbx")Стъпка 4: Спасете до STL
повикване Scene.save() С А .stl по подразбиране, изходът е ASCII STL. За да се напише бинарна STl (малки файлове, няма човешки читаем заглавие) използване 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)Стъпка 5: Спестете на GLTF или GLB
Файловете на GLTF 2.0 могат да бъдат изнесени с помощта на GltfExporter и GltfSaveOptions.Съставът binary_mode = True да създаде самосъдържание .glb Двойна пакета; Set binary_mode = False За JSON базирани .gltf Форматът е.
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())Стъпка 6: Използвайте FBX
Не се прилагат:
FbxExporter.save()иFbxExporter.save_to_stream()ВъзрастNotImplementedErrorFBX експорт не е наличен в Aspose.3D FOSS за Python по това време.Използвайте GLB, OBJ, STL или Collada (DAE) формати вместо това. вижте стъпки 4, 5 и 7 за работа на износ опции.
# 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Стъпка 7: Спестете към OBJ или Collada (DAE)
За OBJ и Collada, преминайте по пътя на файла директно към Scene.save().Библиотеката открива формата от разширението.
# 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)Общи проблеми и фиксиране
Празен изход на файла след scene.save() Това обикновено означава, че коренният възел на сцената няма детски възоли с геометрия. проверете дали всеки въже е прикрепен към scene.root_node Преди да се обадите save.Проверете len(scene.root_node.child_nodes) След като се изгради сцена.
AttributeError Когато се изгражда геометрия на меша и на Mesh клас магазини вертикални като списък на вътрешни контролни точки. за подробни модели строителство на меша, се отнася до Как да създадете меша в Python Статия, която обхваща създаването на полигон, вертекс елементи и UV данни.
Производството на ГЛБ е по-голямо от очакваното Бинарната GLB включва всички данни за геометрия и текстура. GltfSaveOptions.flip_tex_coord_v се поставя за True, допълнителен координатен пропуск е включен. False Ако не се нуждаете от V-аксис текстура флипване.
FBX експортът не е наличен в текущото издание FbxExporter.save() възвишаване NotImplementedError.FBX внос (затоварете .fbx файлове) работи нормално, но износът към FBX не се прилага. конвертиране на GLB, OBJ, STL или Collada вместо това.
Колдата DAE не включва материали Създаване ColladaSaveOptions.enable_materials = True (Това е False преди износ.
Често задавани въпроси
Какви формати могат да Aspose.3D FOSS за износ на Python?
Библиотеката поддържа експортиране до: STL, glTF 2.0 (текст и бинарни GLB), OBJ и Collada (DAE). Scene.save();Библиотеката чете разширението, за да избере правилния експортер.
Забележка:Износът на FBX е Не се прилагат В настоящото издание -
FbxExporter.save()възвишаванеNotImplementedError.Вместо това използвайте GLB, OBJ, STL или Collada.
Има ли API за износ на потока, който се избягва да пише на диска?
Да е. GltfExporter.export(scene, stream, options) Пишете на всеки io.BytesIO Можете да прехвърлите буфер в паметта директно към уеб отговор или по-нататъшно обработване, без да докоснете файловата система.
Как да конвертираме сцена от един формат в друг?
Заредете сцената с Scene.from_file("input.fbx") и спасяват с scene.save("output.gltf").Библиотеката управлява конверсията в паметта; няма нужда от междинни файлове.
Мога ли да съхранявам няколко под-сцена за отделни файлове?
достъп scene.sub_scenes да се излъчва по всяка под-цена, създаване на нова Scene обект, прикрепете съответните възли и обадете се save() на всеки от тях.
И да Scene.save() Превръщаме ли съществуващите файлове тихо?
Да. Библиотеката не прави грешка, ако целевата файла вече съществува; тя го надписва. Добавете проверка на съществуването на файлове в кода си, когато трябва да се предпазите от случайни надписи.