Compatibilitat de formats
Aspose.3D FOSS per a Python pot llegir i escriure set formats 3D utilitzant una única representació d’escena en memòria. La biblioteca tradueix cada format a un objecte comú Scene objecte en carregar i serialitza aquest objecte de nou al format de destinació en desar. Això vol dir que una escena carregada des d’OBJ es pot desar directament a glTF sense cap pas de conversió intermediari.
Formats compatibles
| Format | Extensió | Lectura | Escriptura | Classe d’opcions | Notes |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Sí | Sí | ObjLoadOptions | .mtl càrrega de material compatible |
| STL (binari) | .stl | Sí | Sí | StlSaveOptions | Lectura binària i ASCII; per defecte, el desament és binari |
| STL (ASCII) | .stl | Sí | Sí | StlSaveOptions | Cicle complet verificat |
| glTF 2.0 | .gltf | Sí | Sí | GltfSaveOptions | Graf complet de l’escena, materials i animacions preservats |
| GLB (binary glTF) | .glb | Sí | Sí | GltfSaveOptions | Contenidor binari d’un sol fitxer |
| COLLADA | .dae | Sí | Sí | ColladaLoadOptions / ColladaSaveOptions | Jerarquia de l’escena i materials |
| 3MF | .3mf | Sí | Sí | ThreeMfSaveOptions | Format de fabricació additiva |
| FBX | .fbx | Parcial | No | N/A | El tokenitzador funciona; el parser complet està en procés (no està llest per a producció) |
Format OBJ
Wavefront OBJ és el format d’intercanvi més àmpliament compatible per a malles estàtiques. Aspose.3D FOSS carrega geometria (vèrtexs, normals, coordenades UV i cares poligonals) i opcionalment el companion .mtl fitxer de material.
ObjLoadOptions
| Propietat | Tipus | Per defecte | Descripció |
|---|---|---|---|
enable_materials | bool | True | Analitza el .mtl fitxer referenciat per la capçalera OBJ |
flip_coordinate_system | bool | False | Convertir de Y-up amb mà dreta a Z-up amb mà dreta |
normalize_normal | bool | True | Normalitzar totes les normals de superfície importades a una longitud unitària |
scale | float | 1.0 | Factor d’escala uniforme aplicat a totes les posicions dels vèrtexs |
Carregant un fitxer 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)}")Desant a OBJ
scene.save("output.obj")L’exportació OBJ escriu les posicions dels vèrtexs i les cares dels polígons. Si l’escena conté LambertMaterial o PhongMaterial objectes, la biblioteca escriu un fitxer complementari .mtl fitxer automàticament.
Format STL
STL (STereoLithography) emmagatzema malles de triangles com una llista no indexada de facetes. Es suporten tant les variants binàries com les ASCII per a la lectura; la biblioteca utilitza per defecte el format binari en desar.
StlSaveOptions
StlSaveOptions no té camps obligatoris. Instancia’l per passar a scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Exemple d’anada i tornada
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 només emmagatzema geometria de triangles, sense normals més enllà de la normal de la faceta, sense coordenades UV, sense materials i sense jerarquia. Si la vostra escena conté quads o polígons d’ordre superior, es triangulen automàticament en desar.
Format glTF / GLB
glTF 2.0 és el format recomanat per a l’intercanvi 3D modern. Conserva el gràfic complet de l’escena (jerarquia de nodes, nodes amb nom, transformacions), materials (LambertMaterial, PhongMaterial → conversió PBR), i clips d’animació. GLB és la variant del contenidor binari d’un sol fitxer.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binarySuport de materials
Els materials Aspose.3D FOSS es mapen a glTF pbrMetallicRoughness en exportació:
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")Verificant la sortida 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', []))}")Format COLLADA
COLLADA (.dae) és un format basat en XML que admet jerarquies d’escena, materials, múltiples canals UV i animació esquelètica. Aspose.3D FOSS llegeix i escriu l’arbre complet de nodes i les definicions de materials.
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 és una bona elecció quan necessites fer un viatge d’anada i tornada de jerarquies amb nodes i materials amb nom sense cap pèrdua de dades.
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.).
Format FBX
Estat: en curs (no està llest per a producció).
FBX (.fbx) el suport a Aspose.3D FOSS es troba actualment a la fase de tokenitzador. El tokenitzador binari FBX pot analitzar l’estructura del fitxer, però l’analitzador complet de nodes, malles i materials té errors coneguts i no està complet. Els resultats de lectura FBX s’han de considerar experimentals.
No utilitzeu FBX en les cadenes de producció amb aquesta versió. Si les vostres dades d’origen són en FBX, convertiu-les primer a glTF o OBJ utilitzant Blender o FBX Review abans de carregar-les amb Aspose.3D FOSS.
No s’admet l’escriptura de FBX.
Detecció automàtica del format
Scene.from_file() i scene.open() detecta el format automàticament utilitzant l’extensió del fitxer i, quan estiguin disponibles, els bytes màgics a la capçalera del fitxer:
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")Si l’extensió és absent o ambigua, la biblioteca recorre a la inspecció de la capçalera (magic bytes). Els fitxers no compatibles o no reconeguts generen una IOError amb un missatge descriptiu.
Consells i bones pràctiques
- Utilitzeu glTF o GLB per a pipelines moderns. glTF conserva el gràfic complet de l’escena, els materials i les dades d’animació. És el format més complet per a l’intercanvi amb motors de joc i visualitzadors web.
- Utilitzeu OBJ per a la màxima compatibilitat. OBJ és compatible amb pràcticament totes les eines 3D. És limitat a malles estàtiques però és extremadament portable.
- Utilitzeu 3MF per a la impressió. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Eviteu FBX fins que estigui llest per a producció. Consulteu les notes de la versió per a la versió en què l’anàlisi completa de FBX ja està disponible.
- Feu coincidir l’extensió de desament amb el format. No passeu un
.gltfextensió quan vols GLB binari; usa.glbexplícitament. L’extensió determina quin serialitzador s’utilitza. - Comprova la compatibilitat de polígons. STL i 3MF requereixen triangles. Quads i N-gons es triangulen automàticament en desar, però el recompte de vèrtexs augmentarà. Si necessites controlar la triangulació, crida
mesh.triangulate()abans de desar.