Formaatondersteuning
Aspose.3D FOSS voor Python kan zeven 3D-formaten lezen en schrijven met behulp van een enkele in‑memory scenerepresentatie. De bibliotheek zet elk formaat om naar een gemeenschappelijk Scene object bij het laden en serialiseert dat object terug naar het doelformaat bij het opslaan. Dit betekent dat een scène die uit OBJ is geladen direct kan worden opgeslagen naar glTF zonder tussenliggende conversiestappen.
Ondersteunde formaten
| Formaat | Extensie | Lezen | Schrijven | Optiesklasse | Opmerkingen |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Ja | Ja | ObjLoadOptions | .mtl materiaal laden ondersteund |
| STL (binair) | .stl | Ja | Ja | StlSaveOptions | Binair en ASCII lezen; opslaan standaard naar binair |
| STL (ASCII) | .stl | Ja | Ja | StlSaveOptions | Round-trip geverifieerd |
| glTF 2.0 | .gltf | Ja | Ja | GltfSaveOptions | Volledige scènegraph, materialen en animaties behouden |
| GLB (binaire glTF) | .glb | Ja | Ja | GltfSaveOptions | Binaire container in één bestand |
| COLLADA | .dae | Ja | Ja | ColladaLoadOptions / ColladaSaveOptions | Scènehiërarchie en materialen |
| 3MF | .3mf | Ja | Ja | ThreeMfSaveOptions | Additieve fabricageformaat |
| FBX | .fbx | Gedeeltelijk | Nee | N/A | Tokenizer werkt; volledige parser is in uitvoering (niet productieklaar) |
OBJ-formaat
Wavefront OBJ is het meest breed ondersteunde uitwisselingsformaat voor statische meshes. Aspose.3D FOSS laadt geometrie (vertices, normals, UV-coördinaten en polygonale vlakken) en optioneel het bijbehorende .mtl materialenbestand.
ObjLoadOptions
| Eigenschap | Type | Standaard | Beschrijving |
|---|---|---|---|
enable_materials | bool | True | Parse de .mtl bestand waarnaar wordt verwezen door de OBJ-header |
flip_coordinate_system | bool | False | Converteren van Y-up rechtshandig naar Z-up rechtshandig |
normalize_normal | bool | True | Normaliseer alle geïmporteerde oppervlaksnormaalwaarden tot een eenheidslengte |
scale | float | 1.0 | Uniforme schaalfactor toegepast op alle vertexposities |
Een OBJ‑bestand laden
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)}")Opslaan naar OBJ
scene.save("output.obj")OBJ export schrijft vertexposities en polygonvlakken. Als de scène bevat LambertMaterial of PhongMaterial objecten, schrijft de bibliotheek een begeleidend .mtl bestand automatisch.
STL-formaat
STL (STereoLithography) slaat driehoeknetwerken op als een niet-geïndexeerde lijst van facetten. Zowel binaire als ASCII-varianten worden ondersteund voor lezen; de bibliotheek gebruikt standaard binair bij opslaan.
StlSaveOptions
StlSaveOptions heeft geen verplichte velden. Instantieer het om door te geven aan scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Round-trip voorbeeld
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 slaat alleen driehoekgeometrie op, zonder normale vectoren behalve de facetnormaal, zonder UV-coördinaten, zonder materialen en zonder hiërarchie. Als je scène quads of polygonen van hogere orde bevat, worden deze automatisch getrianguleerd bij het opslaan.
glTF / GLB-formaat
glTF 2.0 is het aanbevolen formaat voor moderne 3D‑uitwisseling. Het behoudt de volledige scenegrafiek (node‑hiërarchie, benoemde nodes, transformaties), materialen (LambertMaterial, PhongMaterial → PBR‑conversie), en animatieclips. GLB is de single‑file binaire containervariant.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryMateriaalondersteuning
Aspose.3D FOSS-materialen worden gemapt naar glTF pbrMetallicRoughness bij export:
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")Verifiëren van glTF‑uitvoer
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-formaat
COLLADA (.dae) is een XML-gebaseerd formaat dat scènehiërarchieën, materialen, meerdere UV-kanalen en skeletanimatie ondersteunt. Aspose.3D FOSS leest en schrijft de volledige knoopboom en materiaaldefinities.
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 is een goede keuze wanneer je hiërarchieën met benoemde knooppunten en materialen zonder gegevensverlies heen en weer moet transporteren.
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-indeling
Status: in uitvoering (niet productie-klaar).
FBX (.fbx) ondersteuning in Aspose.3D FOSS bevindt zich momenteel in de tokenizer-fase. De binaire FBX-tokenizer kan de bestandsstructuur ontleden, maar de volledige knoop-, mesh- en materiaalanalyser heeft bekende bugs en is niet compleet. FBX-leesresultaten moeten als experimenteel worden beschouwd.
Gebruik FBX niet in productiepijplijnen met deze release. Als uw brongegevens in FBX zijn, converteer ze dan eerst naar glTF of OBJ met behulp van Blender of FBX Review voordat u ze laadt met Aspose.3D FOSS.
FBX-schrijven wordt niet ondersteund.
Automatische detectie van formaat
Scene.from_file() en scene.open() detecteert het formaat automatisch met behulp van de bestandsextensie en, waar beschikbaar, magic bytes in de file header:
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")Als de extensie ontbreekt of dubbelzinnig is, valt de bibliotheek terug op inspectie van de header (magic bytes). Niet‑ondersteunde of niet‑herkende bestanden veroorzaken een IOError met een beschrijvende melding.
Tips en best practices
- Gebruik glTF of GLB voor moderne pipelines. glTF behoudt de volledige scene graph, materialen en animatiegegevens. Het is het meest volledige formaat voor uitwisseling met game engines en web viewers.
- Gebruik OBJ voor maximale compatibiliteit. OBJ wordt ondersteund door vrijwel elk 3D‑gereedschap. Het is beperkt tot statische meshes, maar is uiterst draagbaar.
- Gebruik 3MF voor het afdrukken. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Vermijd FBX totdat het productie‑klaar is. Bekijk de release‑notes voor de versie waarin volledige FBX‑parsing voltooid is.
- Stem de opslagextensie af op het formaat. Geef geen
.gltfextensie wanneer je een binaire GLB wilt; gebruik.glbexpliciet. De extensie bepaalt welke serialiser wordt gebruikt. - Controleer polygon-compatibiliteit. STL en 3MF vereisen driehoeken. Quads en N-gons worden bij het opslaan automatisch getrianguleerd, maar het aantal vertices zal toenemen. Als je de triangulatie wilt beheersen, roep
mesh.triangulate()voordat je opslaat.