Supporto dei Formati
Aspose.3D FOSS per Python può leggere e scrivere sette formati 3D usando una singola rappresentazione della scena in memoria. La libreria traduce ogni formato in un oggetto comune Scene oggetto al caricamento e serializza quell’oggetto nuovamente nel formato di destinazione al salvataggio. Ciò significa che una scena caricata da OBJ può essere salvata direttamente in glTF senza alcun passaggio di conversione intermedio.
Formati Supportati
| Formato | Estensione | Lettura | Scrittura | Classe Options | Note |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Sì | Sì | ObjLoadOptions | .mtl caricamento dei materiali supportato |
| STL (binario) | .stl | Sì | Sì | StlSaveOptions | Lettura binaria e ASCII; il salvataggio predefinito è binario |
| STL (ASCII) | .stl | Sì | Sì | StlSaveOptions | Verifica round-trip completata |
| glTF 2.0 | .gltf | Sì | Sì | GltfSaveOptions | Grafico della scena completo, materiali e animazioni preservati |
| GLB (binary glTF) | .glb | Sì | Sì | GltfSaveOptions | Contenitore binario a file singolo |
| COLLADA | .dae | Sì | Sì | ColladaLoadOptions / ColladaSaveOptions | Gerarchia della scena e materiali |
| 3MF | .3mf | Sì | Sì | ThreeMfSaveOptions | Formato di produzione additiva |
| FBX | .fbx | Parziale | No | N/A | Tokenizer funzionante; il parser completo è in corsonon pronto per la produzione) |
Formato OBJ
Wavefront OBJ è il formato di interscambio più ampiamente supportato per le mesh statiche. Aspose.3D FOSS carica la geometria (vertici, normali, coordinate UV e facce poligonali) e opzionalmente il companion .mtl file di materiale.
ObjLoadOptions
| Proprietà | Tipo | Predefinito | Descrizione |
|---|---|---|---|
enable_materials | bool | True | Analizza il .mtl file a cui fa riferimento l’intestazione OBJ |
flip_coordinate_system | bool | False | Converti da Y-up a mano destra a Z-up a mano destra |
normalize_normal | bool | True | Normalizza tutte le normali di superficie importate a lunghezza unitaria |
scale | float | 1.0 | Fattore di scala uniforme applicato a tutte le posizioni dei vertici |
Caricamento di un file 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)}")Salvataggio in OBJ
scene.save("output.obj")L’esportazione OBJ scrive le posizioni dei vertici e le facce dei poligoni. Se la scena contiene LambertMaterial oppure PhongMaterial oggetti, la libreria scrive un file complementare .mtl automaticamente.
Formato STL
STL (STereoLithography) memorizza le mesh triangolari come un elenco non indicizzato di faccette. Sono supportate sia le varianti binarie sia quelle ASCII per la lettura; la libreria utilizza per impostazione predefinita il formato binario durante il salvataggio.
StlSaveOptions
StlSaveOptions non ha campi obbligatori. Istanzialo per passare a scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Esempio di 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 memorizza solo la geometria a triangoli, senza normali oltre la normale della faccetta, senza coordinate UV, senza materiali e senza gerarchia. Se la tua scena contiene quad o poligoni di ordine superiore, vengono triangolati automaticamente al salvataggio.
Formato glTF / GLB
glTF 2.0 è il formato consigliato per lo scambio 3D moderno. Preserva l’intero grafo della scena (gerarchia dei nodi, nodi nominati, trasformazioni), i materiali (LambertMaterial, PhongMaterial → conversione PBR), e le clip di animazione. GLB è la variante contenitore binario a file singolo.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binarySupporto dei materiali
Aspose.3D FOSS i materiali sono mappati su glTF pbrMetallicRoughness in esportazione:
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")Verifica dell’output 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', []))}")Formato COLLADA
COLLADA (.dae) è un formato basato su XML che supporta gerarchie di scena, materiali, più canali UV e animazione scheletrica. Aspose.3D FOSS legge e scrive l’intero albero dei nodi e le definizioni dei materiali.
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 è una buona scelta quando hai bisogno di fare round‑trip di gerarchie con nodi e materiali nominati senza alcuna perdita di dati.
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.).
Formato FBX
Stato: in corso (non pronto per la produzione).
FBX (.fbx) il supporto in Aspose.3D FOSS è attualmente nella fase del tokenizer. Il tokenizer binario FBX può analizzare la struttura del file, ma il parser completo di nodi, mesh e materiali presenta bug noti e non è completo. I risultati della lettura FBX dovrebbero essere considerati sperimentali.
Non utilizzare FBX nei flussi di produzione con questa versione. Se i tuoi dati di origine sono in FBX, converti prima in glTF o OBJ usando Blender o FBX Review prima di caricarli con Aspose.3D FOSS.
La scrittura di FBX non è supportata.
Rilevamento automatico del formato
Scene.from_file() e scene.open() rileva automaticamente il formato usando l’estensione del file e, dove disponibili, i byte magici nell’intestazione del file:
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")Se l’estensione è assente o ambigua, la libreria ricade sull’ispezione dell’intestazione (byte magici). I file non supportati o non riconosciuti generano un IOError con un messaggio descrittivo.
Suggerimenti e migliori pratiche
- Usa glTF o GLB per pipeline moderne. glTF conserva l’intero grafo della scena, i materiali e i dati di animazione. È il formato più completo per lo scambio con motori di gioco e visualizzatori web.
- Usa OBJ per la massima compatibilità. OBJ è supportato praticamente da tutti gli strumenti 3D. È limitato a mesh statiche ma è estremamente portabile.
- Usa 3MF per la stampa. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Evita FBX finché non è pronto per la produzione. Controlla le note di rilascio per la versione in cui l’analisi completa di FBX è terminata.
- Fai corrispondere l’estensione di salvataggio al formato. Non passare un
.gltfestensione quando desideri un GLB binario; usa.glbesplicitamente. L’estensione determina quale serializzatore viene utilizzato. - Verifica la compatibilità dei poligoni. STL e 3MF richiedono triangoli. Quadri e N-gon vengono triangolati automaticamente al salvataggio, ma il conteggio dei vertici aumenterà. Se hai bisogno di controllare la triangolazione, chiama
mesh.triangulate()prima del salvataggio.