Formatunterstützung
Aspose.3D FOSS für Python kann sieben 3D-Formate lesen und schreiben, indem es eine einzige In‑Memory‑Szenenrepräsentation verwendet. Die Bibliothek übersetzt jedes Format in ein gemeinsames Scene Objekt beim Laden und serialisiert dieses Objekt beim Speichern zurück in das Zielformat. Das bedeutet, dass eine aus OBJ geladene Szene direkt nach glTF gespeichert werden kann, ohne Zwischenschritte der Konvertierung.
Unterstützte Formate
| Format | Erweiterung | Lesen | Schreiben | Options-Klasse | Hinweise |
|---|---|---|---|---|---|
| Wavefront OBJ | .obj | Ja | Ja | ObjLoadOptions | .mtl Materialladen unterstützt |
| STL (binär) | .stl | Ja | Ja | StlSaveOptions | Binär- und ASCII-Lesen; Speichern standardmäßig im Binärformat |
| STL (ASCII) | .stl | Ja | Ja | StlSaveOptions | Rundlauf verifiziert |
| glTF 2.0 | .gltf | Ja | Ja | GltfSaveOptions | Vollständiger Szenengraph, Materialien und Animationen erhalten |
| GLB (binary glTF) | .glb | Ja | Ja | GltfSaveOptions | Einzeldatei-Binärcontainer |
| COLLADA | .dae | Ja | Ja | ColladaLoadOptions / ColladaSaveOptions | Szenenhierarchie und Materialien |
| 3MF | .3mf | Ja | Ja | ThreeMfSaveOptions | Additive manufacturing Format |
| FBX | .fbx | Teilweise | Nein | N/A | Tokenizer arbeitet; voller Parser ist in Arbeit (nicht produktionsreif) |
OBJ-Format
Wavefront OBJ ist das am weitesten unterstützte Austauschformat für statische Meshes. Aspose.3D FOSS lädt Geometrie (Vertices, Normalen, UV-Koordinaten und polygonale Flächen) und optional die begleitende .mtl Materialdatei.
ObjLoadOptions
| Eigenschaft | Typ | Standard | Beschreibung |
|---|---|---|---|
enable_materials | bool | True | Parse den .mtl Datei, auf die der OBJ-Header verweist |
flip_coordinate_system | bool | False | Konvertieren von Y-up rechtshändig zu Z-up rechtshändig |
normalize_normal | bool | True | Alle importierten Oberflächennormalen auf Einheitslänge normalisieren |
scale | float | 1.0 | Einheitlicher Skalierungsfaktor, der auf alle Scheitelpunktpositionen angewendet wird |
Laden einer OBJ-Datei
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)}")Speichern nach OBJ
scene.save("output.obj")Der OBJ-Export schreibt Scheitelpunktpositionen und Polygonflächen. Wenn die Szene enthält LambertMaterial oder PhongMaterial Objekte, schreibt die Bibliothek eine Begleitdatei .mtl Datei automatisch.
STL-Format
STL (STereoLithography) speichert Dreiecksnetze als eine nicht indizierte Liste von Facetten. Sowohl binäre als auch ASCII-Varianten werden beim Lesen unterstützt; die Bibliothek verwendet beim Speichern standardmäßig das binäre Format.
StlSaveOptions
StlSaveOptions hat keine Pflichtfelder. Instanziieren Sie es, um es zu übergeben an scene.save():
from aspose.threed.formats import StlSaveOptions
opts = StlSaveOptions()
scene.save("output.stl", opts)Round-Trip-Beispiel
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 speichert nur Dreiecksgeometrie, ohne Normalen außer der Facetten-Normale, ohne UV-Koordinaten, ohne Materialien und ohne Hierarchie. Wenn Ihre Szene Vierecke oder höherwertige Polygone enthält, werden sie beim Speichern automatisch trianguliert.
glTF / GLB-Format
glTF 2.0 ist das empfohlene Format für modernen 3D‑Austausch. Es bewahrt den vollständigen Szenengraph (Knotenhierarchie, benannte Knoten, Transformationen), Materialien (LambertMaterial, PhongMaterial → PBR‑Konvertierung), und Animationsclips. GLB ist die eindateige Binärcontainer‑Variante.
GltfSaveOptions
from aspose.threed.formats import GltfSaveOptions
opts = GltfSaveOptions()
scene.save("output.gltf", opts) # JSON + external .bin
scene.save("output.glb", opts) # Self-contained binaryMaterialunterstützung
Aspose.3D FOSS-Materialien werden auf glTF abgebildet pbrMetallicRoughness beim 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")Verifizierung der glTF-Ausgabe
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) ist ein XML-basiertes Format, das Szenenhierarchien, Materialien, mehrere UV-Kanäle und Skelettanimation unterstützt. Aspose.3D FOSS liest und schreibt den vollständigen Knotenbaum sowie die Materialdefinitionen.
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 ist eine gute Wahl, wenn Sie Hierarchien mit benannten Knoten und Materialien ohne Datenverlust round-trip übertragen müssen.
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: in Bearbeitung (nicht produktionsreif).
FBX (.fbx) Unterstützung in Aspose.3D FOSS befindet sich derzeit in der Tokenizer-Phase. Der binäre FBX-Tokenizer kann die Dateistruktur parsen, aber der vollständige Knoten-, Mesh- und Materialparser hat bekannte Fehler und ist nicht vollständig. FBX-Lesergebnisse sollten als experimentell betrachtet werden.
Verwenden Sie FBX in Produktionspipelines mit dieser Version nicht. Wenn Ihre Quelldaten im FBX-Format vorliegen, konvertieren Sie sie zuerst mit Blender oder FBX Review zu glTF oder OBJ, bevor Sie sie mit Aspose.3D FOSS laden.
FBX-Schreiben wird nicht unterstützt.
Automatische Format-Erkennung
Scene.from_file() und scene.open() erkennen das Format automatisch anhand der Dateierweiterung und, falls verfügbar, anhand der Magic-Bytes im Dateikopf:
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")Wenn die Erweiterung fehlt oder mehrdeutig ist, greift die Bibliothek auf die Header‑Analyse (Magic Bytes) zurück. Nicht unterstützte oder nicht erkannte Dateien lösen ein IOError mit einer beschreibenden Meldung.
Tipps und bewährte Verfahren
- Verwenden Sie glTF oder GLB für moderne Pipelines. glTF bewahrt den vollständigen Szenengraphen, Materialien und Animationsdaten. Es ist das umfassendste Format für den Austausch mit Spiel‑Engines und Web‑Viewern.
- Verwende OBJ für maximale Kompatibilität. OBJ wird von praktisch jedem 3D‑Tool unterstützt. Es ist auf statische Meshes beschränkt, aber äußerst portabel.
- Verwende 3MF für den Druck. 3MF carries colour, orientation hints, and print settings that STL cannot express.
- Vermeide FBX, bis es produktionsreif ist. Sieh dir die Release‑Notes der Version an, in der die vollständige FBX‑Analyse abgeschlossen ist.
- Passe die Speichererweiterung dem Format an. Gib nicht ein.
.gltfErweiterung, wenn Sie ein binäres GLB möchten; verwenden Sie.glbexplizit. Die Erweiterung bestimmt, welcher Serialisierer verwendet wird. - Prüfen Sie die Polygonkompatibilität. STL und 3MF benötigen Dreiecke. Vierecke und N‑Gons werden beim Speichern automatisch trianguliert, aber die Vertex‑Anzahl wird steigen. Wenn Sie die Triangulierung steuern müssen, rufen Sie
mesh.triangulate()vor dem Speichern auf.