Поддръжка на формати

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_materialsboolTrueАнализирай .mtl файл, посочен в OBJ заглавието
flip_coordinate_systemboolFalseКонвертиране от Y-горе деснична към Z-горе деснична
normalize_normalboolTrueНормализиране на всички импортирани повърхностни нормали до единична дължина
scalefloat1.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 3MF

3MF 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() преди запазване.
 Български