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

FormatoExtensiónLeerEscribirClase OptionsNotas
Wavefront OBJ.objObjLoadOptions.mtl carga de material compatible
STL (binario).stlStlSaveOptionsLectura binaria y ASCII; guardar por defecto en binario
STL (ASCII).stlStlSaveOptionsVerificado en ida y vuelta
glTF 2.0.gltfGltfSaveOptionsGrafo de escena completo, materiales y animaciones preservados
GLB (binary glTF).glbGltfSaveOptionsContenedor binario de un solo archivo
COLLADA.daeColladaLoadOptions / ColladaSaveOptionsJerarquía de escena y materiales
3MF.3mfThreeMfSaveOptionsFormato de fabricación aditiva
FBX.fbxParcialNoN/ATokenizador 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

PropiedadTipoPredeterminadoDescripción
enable_materialsboolTrueAnalizar el .mtl archivo referenciado por el encabezado OBJ
flip_coordinate_systemboolFalseConvertir de Y-up de mano derecha a Z-up de mano derecha
normalize_normalboolTrueNormalizar todas las normales de superficie importadas a longitud unitaria
scalefloat1.0Factor 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 binary

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

3MF 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 .gltf extensión cuando quieres GLB binario; usa .glb explí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.
 Español