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

FormatoEstensioneLetturaScritturaClasse OptionsNote
Wavefront OBJ.objObjLoadOptions.mtl caricamento dei materiali supportato
STL (binario).stlStlSaveOptionsLettura binaria e ASCII; il salvataggio predefinito è binario
STL (ASCII).stlStlSaveOptionsVerifica round-trip completata
glTF 2.0.gltfGltfSaveOptionsGrafico della scena completo, materiali e animazioni preservati
GLB (binary glTF).glbGltfSaveOptionsContenitore binario a file singolo
COLLADA.daeColladaLoadOptions / ColladaSaveOptionsGerarchia della scena e materiali
3MF.3mfThreeMfSaveOptionsFormato di produzione additiva
FBX.fbxParzialeNoN/ATokenizer 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àTipoPredefinitoDescrizione
enable_materialsboolTrueAnalizza il .mtl file a cui fa riferimento l’intestazione OBJ
flip_coordinate_systemboolFalseConverti da Y-up a mano destra a Z-up a mano destra
normalize_normalboolTrueNormalizza tutte le normali di superficie importate a lunghezza unitaria
scalefloat1.0Fattore 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 binary

Supporto 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 3MF

3MF 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 .gltf estensione quando desideri un GLB binario; usa .glb esplicitamente. 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.
 Italiano