Einführung
3D content rarely stays in a single format for its entire lifetime. A model may originate as an OBJ file exported from a modelling application, travel through a 3D printing pipeline as STL, appear in a web application as glTF, and end up in an additive manufacturing tool as 3MF. Each format serves a different audience and a different downstream tool, and conversion between them is something most 3D pipelines need to handle reliably.
Python ist eine natürliche Passform für diese Arbeit: Shell-Skripte sind zu zerbrechlich und vollständige DCC (digitale Content Creation) -Tool-Integrationen sind für die Batchverarbeitung zu schwer. Was Sie brauchen, ist ein Library, das jedes dieser Formate laden kann, Ihnen einen konsistenten Szenengraph gibt und in jedes Zielformat zurückschreiben kann ohne dass eine GUI oder Grafiktreiber erforderlich sind.
3D FOSS für Python (aspose-3d-foss,Diese Anleitung zeigt die gängigsten Konvertierungswege mit vollständigen, ausführbaren Codebeispielen.
Welche Formate unterstützt Aspose.3D FOSS?
| Format der Datenbank | Extension(s) | Last | Speichern | Allgemeine Verwendungszwecke |
|---|---|---|---|---|
| OBJ | .obj | - Ja , das ist gut . | - Ja , das ist gut . | Austausch von Modellierungswerkzeugen; .mtl Materialdateien unterstützt |
| STL | .stl | - Ja , das ist gut . | - Ja , das ist gut . | 3D printing, CAD export; binary and ASCII variants |
| GFT-Systeme | .gltf, .glb | - Ja , das ist gut . | - Ja , das ist gut . | Web-Viewer, Spieleanlagen; .glb ist die eigenständige binäre Variante, |
| COLLADA | .dae | - Ja , das ist gut . | - Ja , das ist gut . | Import aus Animationswerkzeugen; ColladaSaveOptions Unterstützung der Ausfuhr |
| 3MF | .3mf | - Ja , das ist gut . | - Ja , das ist gut . | Additive Fertigung, reichhaltiger mit Druckmetadaten als STL |
Die Formaterkennung erfolgt automatisch über die Dateierweiterung.ObjLoadOptions, StlSaveOptions, GltfSaveOptions) sind verfügbar, wenn Sie eine feinkörnige Kontrolle benötigen.
Anmerkung zum FBX: Die Bibliothek enthält einen teilweisen FBX-Tokenisierer für den Import. FBx wird in dieser Version nicht für Produktionsumwandlungsworkflows empfohlen; stattdessen werden OBJ oder glTF als Zwischenformate verwendet.
OBJ an STL: Vorbereitung eines Modells für den 3D-Druck
OBJ ist das häufigste Ausgabeformat von Modellierungs- und Bildhauwerkzeugen. STL ist die Sprache der 3D-Druckschneider. Die Umwandlung zwischen ihnen erfolgt mit einem einzigen Anruf.
from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
opts = StlSaveOptions()
scene.save("model.stl", opts)
STL kodiert nur Dreieckseiten. Wenn Ihre OBJ-Datei Quad oder n-gon Seiten enthält, trianguliert der Exporteur sie automatisch vor dem Schreiben. mesh.triangulate() auf jedem Netz in der Szene:
from aspose.threed import Scene
from aspose.threed.entities import Mesh
from aspose.threed.formats import StlSaveOptions
scene = Scene.from_file("model.obj")
def triangulate_all(node):
if isinstance(node.entity, Mesh):
# entity setter clears existing entities and sets the new one
node.entity = node.entity.triangulate()
for child in node.child_nodes:
triangulate_all(child)
triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())
OBJ zu glTF: Export für Web- und Spieleanlagen
glTF 2.0 ist das bevorzugte Austauschformat für Echtzeit-Renderer, WebGL-Viewer und Spieleanlagen wie Babylon.js, Three. js und Unity. GLB (die binäre Variante) verpackt Geometrie, Texturen und Materialien in eine einzelne selbstständige Datei, die einfacher über HTTP bedient werden kann.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("model.obj")
##Save as JSON-based glTF (external buffer)
opts_gltf = GltfSaveOptions()
scene.save("model.gltf", opts_gltf)
##Save as self-contained GLB binary: preferred for web delivery
scene.save("model.glb", GltfSaveOptions())
Das Format wird aus der Dateierweiterung abgeleitet: .gltf erzeugt das JSON+Binary-Buffer-Paar; .glb Die Daten des OBJ-Materials (LambertMaterial, PhongMaterial) wird in die glTF-PBR-Materialrepräsentation übertragen, wenn ein Äquivalent vorhanden ist.
STL zu glTF: vom Scanner- oder CAD-Ausgang zum Web
STL-Dateien von 3D-Scannern und CAD-Systemen sind übliche Eingaben, die im Internet sichtbar gemacht werden müssen. ST L trägt nur Dreieckgeometrie und keine Materialdaten, so dass die Konvertierung einfach ist.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Wenn die STL durch ein CAD-Tool mit einem ungewöhnlichen Koordinatensystem (Z-up vs. Y- up) erzeugt wurde, können Sie vor dem Speichern die Wurzelknotentransformation überprüfen und korrigieren:
import math
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("cad_export.stl")
# Rotate -90 degrees around X to convert Z-up to Y-up
# set_euler_angles takes radians, not degrees
root = scene.root_node
root.transform.set_euler_angles(-math.pi / 2, 0.0, 0.0)
scene.save("cad_export_yup.glb", GltfSaveOptions())
glTF bis 3MF: Vorbereitung auf die Zusatzstoffherstellung
3MF is a modern 3D printing format backed by the 3MF Consortium. It supports richer metadata than STL (colour, material assignments, build instructions) and is accepted by slicer software such as PrusaSlicer and Bambu Studio. If you are delivering models from a web viewer into a printing workflow, converting GLB to 3MF is a useful step.
from aspose.threed import Scene
from aspose.threed import FileFormat
from aspose.threed.formats import SaveOptions
scene = Scene.from_file("model.glb")
scene.save("model.3mf")
Das 3MF-Format wird automatisch vom .3mf Die Ausweitung der Kontrolle durch eine SaveOptions Instanz für 3MF konfiguriert.
Batch-Umwandlungsmuster
In der Praxis werden Konvertierungsaufgaben auf Verzeichnissen von Dateien und nicht einzelne Daten durchgeführt. Das folgende Muster behandelt einen Ordner mit OBJ-Datei en und konvertiert jede zu GLB, wobei die Fehlerbearbeitung pro Datu bearbeitet wird, so dass eine einzige schlechte Datierung den gesamten Auslauf nicht abbrechen kann.
import os
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
input_dir = "./obj_files"
output_dir = "./glb_files"
os.makedirs(output_dir, exist_ok=True)
opts = GltfSaveOptions()
results = {"ok": [], "failed": []}
for filename in os.listdir(input_dir):
if not filename.lower().endswith(".obj"):
continue
src = os.path.join(input_dir, filename)
stem = os.path.splitext(filename)[0]
dst = os.path.join(output_dir, stem + ".glb")
try:
scene = Scene.from_file(src)
scene.save(dst, opts)
results["ok"].append(filename)
print(f"OK {filename} -> {stem}.glb")
except Exception as exc:
results["failed"].append((filename, str(exc)))
print(f"ERR {filename}: {exc}")
print(f"\n{len(results['ok'])} converted, {len(results['failed'])} failed.")
if results["failed"]:
for name, reason in results["failed"]:
print(f" {name}: {reason}")
Dieses Muster erstreckt sich natürlich auf andere Quell-/Zielformatpaare: Ändern Sie den Erweiterungsfilter und die SaveOptions Klasse für jede Kombination in der obigen Unterlagetabelle.
Schlussfolgerung
Aspose.3D FOSS für Python macht Formatkonvertierung einfach: Laden mit Scene.from_file, die Szenengraphie optional zu überprüfen oder zu ändern, dann mit dem entsprechenden Speicher SaveOptions.Die Bibliothek bearbeitet die Triangulation, Koordinatennormalisierung und formatspezifische Eigenheiten intern.
Eine vollständige Liste der Klassen und Methoden ist in den Unterlagen zu finden. Referenz für die API.Um das Modell der Szenengraphie (Knoten, Maschen, Transformationen) näher zu erläutern:
- Klassen-Szene: Lade-, Speicher- und Szenenebene Metadaten
- Klassenknoten:Hierarchie, Transformationen und Entitätseinbindung
- Klasse-Metzmaschen: Winkeldaten, Polygone und Winkelemente
- Wie man 3D-Modelle in Python lädt
- PyPI: Aspose-3d-Foss (Pypi) ist ein Schlüssel zur Erfassung von PYPI.