Поддръжка на формати
Aspose.3D FOSS за Python може да чете и записва седем 3D формата, използвайки единна представителна сцена в паметта. Библиотеката превежда всеки формат в общ Scene обект при зареждане и сериализира този обект обратно към целевия формат при запазване. Това означава, че сцена, заредена от OBJ, може да бъде запазена директно в glTF без никакви междинни стъпки на конвертиране.
Поддържани формати
| Формат | Разширение | Четене | Запис | Клас Options | Бележки |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Да | Да | ObjLoadOptions | .mtl поддръжка на зареждане на материали |
| STL (binary) | .stl | Да | Да | StlSaveOptions | Четене в двоичен и ASCII режим; запазването по подразбиране е двоично |
| STL (ASCII) | .stl | Да | Да | StlSaveOptions | Потвърдено е обратното преминаване |
| glTF 2.0 | .gltf | Да | Да | GltfSaveOptions | Пълен граф на сцената, материалите и анимациите са запазени |
| GLB (binary glTF) | .glb | Да | Да | GltfSaveOptions | Контейнер за единичен бинарен файл |
| COLLADA | .dae | Да | Да | ColladaLoadOptions / ColladaSaveOptions | Йерархия на сцената и материали |
| 3MF | .3mf | Да | Да | ThreeMfSaveOptions | Формат за адитивно производство |
| FBX | .fbx | Частичен | Не | N/A | Токенизаторът работи; пълен парсер е в процес на разработка (не е готов за продукция) |
OBJ формат
Wavefront OBJ е най-широко поддържаният формат за обмен на статични мрежи. Aspose.3D FOSS зарежда геометрия (върхове, нормали, UV координати и полигонални лица) и по желание съпътстващия .mtl материален файл.
ObjLoadOptions
| Свойство | Тип | По подразбиране | Описание |
|---|---|---|---|
enable_materials | bool | True | Анализирай .mtl файл, посочен в OBJ заглавието |
flip_coordinate_system | bool | False | Конвертиране от Y-горе деснична към Z-горе деснична |
normalize_normal | bool | True | Нормализиране на всички импортирани повърхностни нормали до единична дължина |
scale | float | 1.0 | Униформален коефициент за мащабиране, приложен към всички позиции на върховете |
Зареждане на OBJ файл
from aspose.threed import Scene
from aspose.threed.formats import ObjLoadOptions
options = ObjLoadOptions()
options.enable_materials = True
options.flip_coordinate_system = False
options.scale = 1.0
scene = Scene()
scene.open("model.obj", options)
print(f"Top-level nodes: {len(scene.root_node.child_nodes)}")Записване в OBJ
scene.save("output.obj")Експортът в OBJ записва позициите на върховете и полигонните лица. Ако сцената съдържа LambertMaterial или PhongMaterial обекти, библиотеката записва съпътстващ .mtl файл автоматично.
STL формат
STL (STereoLithography) съхранява триъгълни мрежи като неиндексиран списък от фасети. Поддържат се както бинарни, така и ASCII варианти за четене; при запис библиотеката по подразбиране използва бинарен формат.
StlSaveOptions
StlSaveOptions няма задължителни полета. Създайте го, за да го предадете на scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Пример за round‑trip
from aspose.threed import Scene
##Load
scene = Scene.from_file("model.stl")
##Inspect
for node in scene.root_node.child_nodes:
if node.entity:
print(f"{node.name}: {len(node.entity.control_points)} vertices")
##Save
scene.save("roundtrip.stl")STL съхранява само триъгълна геометрия, без нормали освен нормалата на фасетата, без UV координати, без материали и без йерархия. Ако вашата сцена съдържа четириъгълници или полигони с повече върхове, те се триангулират автоматично при записа.
glTF / GLB формат
glTF 2.0 е препоръчителният формат за съвременен 3D обмен. Той запазва пълния граф на сцената (йерархия на възлите, именувани възли, трансформации), материалите (LambertMaterial, PhongMaterial → PBR конверсия), и анимационните клипове. GLB е вариантът с един файл като бинарен контейнер.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryПоддръжка на материали
Aspose.3D FOSS материалите са съпоставени към glTF pbrMetallicRoughness при експортиране:
from aspose.threed import Scene
from aspose.threed.shading import PhongMaterial
from aspose.threed.utilities import Vector3
scene = Scene()
node = scene.root_node.create_child_node("object")
mat = PhongMaterial()
mat.diffuse_color = Vector3(0.8, 0.2, 0.2) # red
mat.specular_color = Vector3(1.0, 1.0, 1.0)
mat.shininess = 50.0
node.material = mat
scene.save("colored.gltf")Проверка на изхода на glTF
import json
with open("output.gltf") as f:
data = json.load(f)
print(f"Asset version : {data['asset']['version']}")
print(f"Nodes : {len(data.get('nodes', []))}")
print(f"Meshes : {len(data.get('meshes', []))}")COLLADA формат
COLLADA (.dae) е XML-базиран формат, който поддържа йерархии на сцената, материали, множество UV канали и скелетна анимация. Aspose.3D FOSS чете и записва пълното дърво от възли и дефинициите на материалите.
from aspose.threed import Scene
##Load a COLLADA file
scene = Scene.from_file("model.dae")
##Inspect top-level nodes
for node in scene.root_node.child_nodes:
print(f" {node.name}")
##Save back to COLLADA
scene.save("output.dae")COLLADA е добър избор, когато трябва да правите round-trip йерархии с именувани възли и материали без никаква загуба на данни.
3MF Format
3MF (3D Manufacturing Format) targets additive manufacturing (3D printing) workflows. It stores triangle geometry, colour, and print-specific metadata in a ZIP-based container.
from aspose.threed import Scene
from aspose.threed.formats import ThreeMfSaveOptions
scene = Scene.from_file("part.stl") # Load from STL
opts = ThreeMfSaveOptions()
scene.save("part.3mf", opts) # Write as 3MF3MF is the recommended export format when targeting slicer software (Cura, PrusaSlicer, Bambu Studio, etc.).
FBX формат
Състояние: в процес (не е готов за продукция).
FBX (.fbx) поддръжката в Aspose.3D FOSS в момента е на етапа на токенизатор. Бинарният FBX токенизатор може да анализира структурата на файла, но пълният парсер за възли, мрежи и материали има известни грешки и не е завършен. Резултатите от четенето на FBX трябва да се третират като експериментални.
Не използвайте FBX в продукционни процеси с това издание. Ако вашите изходни данни са във FBX, първо ги конвертирайте в glTF или OBJ, като използвате Blender или FBX Review, преди да ги заредите с Aspose.3D FOSS.
Записването във FBX не се поддържа.
Автоматично откриване на формат
Scene.from_file() и scene.open() разпознава формата автоматично, използвайки разширението на файла и, където е налично, магическите байтове в заглавието на файла:
from aspose.threed import Scene
##The library detects each format without being told explicitly
scene_obj = Scene.from_file("model.obj")
scene_glb = Scene.from_file("model.glb")
scene_stl = Scene.from_file("model.stl")
scene_dae = Scene.from_file("model.dae")
scene_3mf = Scene.from_file("model.3mf")Ако разширението липсва или е двусмислено, библиотеката се връща към проверка на заглавието (магически байтове). Неподдържани или неразпознати файлове предизвикват an IOError с описателно съобщение.
Съвети и най-добри практики
- Използвайте glTF или GLB за съвременни конвейери. glTF запазва пълния граф на сцената, материалите и анимационните данни. Това е най-пълният формат за обмен с игрови енджини и уеб прегледачи.
- Използвайте OBJ за максимална съвместимост. OBJ се поддържа от практически всеки 3D инструмент. Той е ограничен до статични мрежи, но е изключително преносим.
- Използвайте 3MF за печат. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Избягвайте FBX, докато не е готов за продукция. Проверете бележките към изданието за версията, в която пълното парсиране на FBX е завършено.
- Съгласувайте разширението за запазване с формата. Не предавайте
.gltfразширение, когато искате двоичен GLB; използвайте.glbизрично. Разширението определя кой сериализатор се използва. - Проверете съвместимостта на полигоните. STL и 3MF изискват триъгълници. Четириъгълници и N-гонове се триангулират автоматично при запазване, но броят на върховете ще се увеличи. Ако трябва да контролирате триангулацията, извикайте
mesh.triangulate()преди запазване.