Formatunderstøttelse
Aspose.3D FOSS for Python kan læse og skrive syv 3D-formater ved hjælp af en enkelt scenerepræsentation i hukommelsen. Biblioteket oversætter hvert format til et fælles Scene objekt ved indlæsning og serialiserer det objekt tilbage til målformatet ved lagring. Det betyder, at en scene indlæst fra OBJ kan gemmes direkte til glTF uden nogen mellemliggende konverteringstrin.
Understøttede formater
| Format | Filendelse | Læs | Skriv | Options-klasse | Noter |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Ja | Ja | ObjLoadOptions | .mtl materialindlæsning understøttet |
| STL (binær) | .stl | Ja | Ja | StlSaveOptions | Binær og ASCII læsning; gemmer som standard i binær |
| STL (ASCII) | .stl | Ja | Ja | StlSaveOptions | Rundtur verificeret |
| glTF 2.0 | .gltf | Ja | Ja | GltfSaveOptions | Fuld scenegraf, materialer og animationer bevaret |
| GLB (binary glTF) | .glb | Ja | Ja | GltfSaveOptions | Enkeltfil binær container |
| COLLADA | .dae | Ja | Ja | ColladaLoadOptions / ColladaSaveOptions | Scenhierarki og materialer |
| 3MF | .3mf | Ja | Ja | ThreeMfSaveOptions | Additiv fremstillingsformat |
| FBX | .fbx | Delvis | Nej | N/A | Tokenizer fungerer; fuld parser er under udvikling (ikke produktionsklar) |
OBJ-format
Wavefront OBJ er det mest udbredte udvekslingsformat for statiske mesh’er. Aspose.3D FOSS indlæser geometri (vertexer, normaler, UV-koordinater og polygonale flader) og valgfrit den tilhørende .mtl materialefil.
ObjLoadOptions
| Egenskab | Type | Standard | Beskrivelse |
|---|---|---|---|
enable_materials | bool | True | Fortolk .mtl fil refereret af OBJ-headeren |
flip_coordinate_system | bool | False | Konverter fra Y-opad højrehåndet til Z-opad højrehåndet |
normalize_normal | bool | True | Normaliser alle importerede overfladenormale til enhedslængde |
scale | float | 1.0 | Ensartet skalafaktor anvendt på alle vertexpositioner |
Indlæsning af en OBJ‑fil
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)}")Gemmer til OBJ
scene.save("output.obj")OBJ-eksport skriver vertexpositioner og polygonflader. Hvis scenen indeholder LambertMaterial eller PhongMaterial objekter, skriver biblioteket en ledsagende .mtl fil automatisk.
STL-format
STL (STereoLithography) gemmer trekantsnet som en ikke-indekseret liste af facetter. Både binære og ASCII-varianter understøttes ved læsning; biblioteket bruger som standard binær ved gemning.
StlSaveOptions
StlSaveOptions har ingen obligatoriske felter. Opret en instans af den for at videregive til scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Eksempel på 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 gemmer kun trekantsgeometri, uden normale udover facettenormallen, ingen UV‑koordinater, ingen materialer og ingen hierarki. Hvis din scene indeholder quads eller polygoner af højere orden, bliver de automatisk trianguleret ved gemning.
glTF / GLB-format
glTF 2.0 er det anbefalede format til moderne 3D-udveksling. Det bevarer den fulde scenegraph (nodehierarki, navngivne noder, transformationer), materialer (LambertMaterial, PhongMaterial → PBR-konvertering), og animationsklip. GLB er den enkeltfil‑binære container‑variant.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryMaterialestøtte
Aspose.3D FOSS-materialer er kortlagt til glTF pbrMetallicRoughness ved eksport:
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")Verificering af glTF-output
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', []))}")COLLADA-format
COLLADA (.dae) er et XML-baseret format, der understøtter scenehierarkier, materialer, flere UV-kanaler og skeletanimation. Aspose.3D FOSS læser og skriver det fulde nodetræ og materialdefinitioner.
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 er et godt valg, når du har brug for at round‑trip hierarkier med navngivne noder og materialer uden nogen datatab.
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.).
FBX-format
Status: under udvikling (ikke klar til produktion).
FBX (.fbx) support i Aspose.3D FOSS er i øjeblikket på tokenizer‑stadiet. Den binære FBX tokenizer kan parse filstrukturen, men den fulde node-, mesh- og materialparser har kendte fejl og er ikke færdig. FBX‑læseresultater bør betragtes som eksperimentelle.
Brug ikke FBX i produktions‑pipelines med denne udgivelse. Hvis dine kilde-data er i FBX, skal du først konvertere dem til glTF eller OBJ ved hjælp af Blender eller FBX Review, før du indlæser dem med Aspose.3D FOSS.
FBX-skrivning understøttes ikke.
Automatisk formatgenkendelse
Scene.from_file() og scene.open() detekter formatet automatisk ved hjælp af filendelsen og, hvor tilgængeligt, magic bytes i filhovedet:
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")Hvis filendelsen er fraværende eller tvetydig, falder biblioteket tilbage på inspektion af headeren (magic bytes). Ikke-understøttede eller ukendte filer udløser en IOError med en beskrivende meddelelse.
Tips og bedste praksis
- Brug glTF eller GLB til moderne pipelines. glTF bevarer den fulde scene graph, materialer og animationsdata. Det er det mest komplette format til udveksling med spilmotorer og web‑visere.
- Brug OBJ for maksimal kompatibilitet. OBJ understøttes af stort set alle 3D‑værktøjer. Det er begrænset til statiske mesh’er, men er ekstremt bærbart.
- Brug 3MF til udskrivning. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Undgå FBX, indtil det er klar til produktion. Tjek udgivelsesnoterne for den version, hvori fuld FBX‑parsing er fuldført.
- Match gemmeudvidelsen til formatet. Send ikke en
.gltfudvidelse, når du vil have binær GLB; brug.glbeksplicit. Udvidelsen bestemmer, hvilken serialiser der bruges. - Tjek polygonkompatibilitet. STL og 3MF kræver trekanter. Quads og N-gons trianguleres automatisk ved lagring, men vertex count vil stige. Hvis du har brug for at styre trianguleringen, skal du kalde
mesh.triangulate()før du gemmer.