Compatibilidad de formatos
Aspose.3D FOSS para Python puede leer y escribir siete formatos 3D usando una única representación de escena en memoria. La biblioteca traduce cada formato a un objeto común Scene al cargar y serializa ese objeto de vuelta al formato de destino al guardar. Esto significa que una escena cargada desde OBJ puede guardarse directamente en glTF sin pasos de conversión intermedios.
Formatos compatibles
| Formato | Extensión | Leer | Escribir | Clase Options | Notas |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Sí | Sí | ObjLoadOptions | .mtl carga de material compatible |
| STL (binario) | .stl | Sí | Sí | StlSaveOptions | Lectura binaria y ASCII; guardar por defecto en binario |
| STL (ASCII) | .stl | Sí | Sí | StlSaveOptions | Verificado en ida y vuelta |
| glTF 2.0 | .gltf | Sí | Sí | GltfSaveOptions | Grafo de escena completo, materiales y animaciones preservados |
| GLB (binary glTF) | .glb | Sí | Sí | GltfSaveOptions | Contenedor binario de un solo archivo |
| COLLADA | .dae | Sí | Sí | ColladaLoadOptions / ColladaSaveOptions | Jerarquía de escena y materiales |
| 3MF | .3mf | Sí | Sí | ThreeMfSaveOptions | Formato de fabricación aditiva |
| FBX | .fbx | Parcial | No | N/A | Tokenizador en funcionamiento; el analizador completo está en progreso (no listo para producción) |
Formato OBJ
Wavefront OBJ es el formato de intercambio más ampliamente soportado para mallas estáticas. Aspose.3D FOSS carga geometría (vértices, normales, coordenadas UV y caras poligonales) y opcionalmente el archivo compañero .mtl archivo de material.
ObjLoadOptions
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
enable_materials | bool | True | Analizar el .mtl archivo referenciado por el encabezado OBJ |
flip_coordinate_system | bool | False | Convertir de Y-up de mano derecha a Z-up de mano derecha |
normalize_normal | bool | True | Normalizar todas las normales de superficie importadas a longitud unitaria |
scale | float | 1.0 | Factor de escala uniforme aplicado a todas las posiciones de vértices |
Cargando un archivo 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)}")Guardando en OBJ
scene.save("output.obj")La exportación OBJ escribe posiciones de vértices y caras de polígonos. Si la escena contiene LambertMaterial o PhongMaterial objetos, la biblioteca escribe un archivo complementario .mtl archivo automáticamente.
Formato STL
STL (STereoLithography) almacena mallas de triángulos como una lista no indexada de facetas. Se admiten variantes binarias y ASCII para la lectura; la biblioteca usa binario por defecto al guardar.
StlSaveOptions
StlSaveOptions no tiene campos obligatorios. Instáncialo para pasar a scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Ejemplo de ida y vuelta
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 solo almacena geometría de triángulos, sin normales más allá de la normal de la faceta, sin coordenadas UV, sin materiales y sin jerarquía. Si tu escena contiene cuádruples o polígonos de orden superior, se triangulan automáticamente al guardar.
Formato glTF / GLB
glTF 2.0 es el formato recomendado para el intercambio 3D moderno. Preserva el grafo completo de la escena (jerarquía de nodos, nodos con nombre, transformaciones), materiales (LambertMaterial, PhongMaterial → conversión PBR), y clips de animación. GLB es la variante de contenedor binario de un solo archivo.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binarySoporte de materiales
Los materiales de Aspose.3D FOSS se asignan a glTF pbrMetallicRoughness en la exportación:
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")Verificando la salida de 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) es un formato basado en XML que admite jerarquías de escena, materiales, múltiples canales UV y animación esquelética. Aspose.3D FOSS lee y escribe el árbol de nodos completo y las definiciones de materiales.
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 es una buena opción cuando necesitas transferir jerarquías con nodos nombrados y materiales sin pérdida de datos.
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
Estado: en progreso (no listo para producción).
FBX (.fbx) el soporte en Aspose.3D FOSS está actualmente en la etapa de tokenizador. El tokenizador binario FBX puede analizar la estructura del archivo, pero el analizador completo de nodos, mallas y materiales tiene errores conocidos y no está completo. Los resultados de lectura de FBX deben considerarse experimentales.
No utilice FBX en canalizaciones de producción con esta versión. Si sus datos de origen están en FBX, conviértalos primero a glTF u OBJ usando Blender o FBX Review antes de cargarlos con Aspose.3D FOSS.
No se admite la escritura de FBX.
Detección automática de formato
Scene.from_file() y scene.open() detecta el formato automáticamente usando la extensión del archivo y, cuando esté disponible, los bytes mágicos en el encabezado del archivo:
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 la extensión está ausente o es ambigua, la biblioteca recurre a la inspección de encabezados (bytes mágicos). Los archivos no compatibles o no reconocidos generan un IOError con un mensaje descriptivo.
Consejos y mejores prácticas
- Utilice glTF o GLB para pipelines modernos. glTF conserva el grafo completo de la escena, los materiales y los datos de animación. Es el formato más completo para el intercambio con motores de juego y visores web.
- Utilice OBJ para la máxima compatibilidad. OBJ es compatible con prácticamente cualquier herramienta 3D. Está limitado a mallas estáticas, pero es extremadamente portátil.
- Utilice 3MF para la impresión. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Evite FBX hasta que esté listo para producción. Consulte las notas de la versión para saber en qué versión el análisis completo de FBX está completo.
- Haga coincidir la extensión de guardado con el formato. No pasar un
.gltfextensión cuando quieres GLB binario; usa.glbexplícitamente. La extensión determina qué serialiser se usa. - Comprueba la compatibilidad de polígonos. STL y 3MF requieren triángulos. Los cuádruplos y N-gons se triangulan automáticamente al guardar, pero el recuento de vértices aumentará. Si necesitas controlar la triangulación, llama
mesh.triangulate()antes de guardar.