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

FormatErweiterungLesenSchreibenOptions-KlasseHinweise
Wavefront OBJ.objJaJaObjLoadOptions.mtl Materialladen unterstützt
STL (binär).stlJaJaStlSaveOptionsBinär- und ASCII-Lesen; Speichern standardmäßig im Binärformat
STL (ASCII).stlJaJaStlSaveOptionsRundlauf verifiziert
glTF 2.0.gltfJaJaGltfSaveOptionsVollständiger Szenengraph, Materialien und Animationen erhalten
GLB (binary glTF).glbJaJaGltfSaveOptionsEinzeldatei-Binärcontainer
COLLADA.daeJaJaColladaLoadOptions / ColladaSaveOptionsSzenenhierarchie und Materialien
3MF.3mfJaJaThreeMfSaveOptionsAdditive manufacturing Format
FBX.fbxTeilweiseNeinN/ATokenizer 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

EigenschaftTypStandardBeschreibung
enable_materialsboolTrueParse den .mtl Datei, auf die der OBJ-Header verweist
flip_coordinate_systemboolFalseKonvertieren von Y-up rechtshändig zu Z-up rechtshändig
normalize_normalboolTrueAlle importierten Oberflächennormalen auf Einheitslänge normalisieren
scalefloat1.0Einheitlicher 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 binary

Materialunterstü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 3MF

3MF 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. .gltf Erweiterung, wenn Sie ein binäres GLB möchten; verwenden Sie .glb explizit. 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.
 Deutsch