Úvod

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 je pre túto prácu prirodzenou voľbou: shell skripty sú príliš krehké a plné integrácie DCC (digital content creation) nástrojov sú príliš ťažké pre dávkové spracovanie. Potrebujete knižnicu, ktorá dokáže načítať ktorýkoľvek z týchto formátov, poskytne vám konzistentný graf scény a zapíše späť do akéhokoľvek cieľového formátu bez potreby GUI alebo grafického ovládača.

Aspose.3D FOSS pre Python (aspose-3d-foss, MIT license) pokrýva túto medzeru. Tento sprievodca ukazuje najbežnejšie konverzné cesty s kompletnými, spustiteľnými príkladmi kódu.


Aké formáty podporuje Aspose.3D FOSS?

FormátExtension(s)NačítaťUložiťBežný prípad použitia
Wavefront OBJ.objÁnoÁnoVýmenný formát z modelovacích nástrojov; .mtl sú podporované materiálové súbory
STL.stlÁnoÁno3D printing, CAD export; binary and ASCII variants
glTF 2.0 / GLB.gltf, .glbÁnoÁnoWebové prehliadače, herné enginy; GLB je samostatná binárna varianta
COLLADA.daeÁnoÁnoImportovať z animačných nástrojov; ColladaSaveOptions podporuje export
3MF.3mfÁnoÁnoAdditívna výroba, bohatšie metadáta tlače než STL

Detekcia formátu je automatická na základe prípony súboru. Formátovo špecifické triedy možností (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) sú k dispozícii, keď potrebujete detailnú kontrolu.

Poznámka k FBX: Knižnica obsahuje čiastočný FBX tokenizér pre import. FBX sa v tomto vydaní neodporúča pre produkčné konverzné pracovné postupy; namiesto toho použite OBJ alebo glTF ako medziformáty.


OBJ na STL: Príprava modelu na 3D tlač

OBJ je najbežnejší výstupný formát z modelovacích a sochárskych nástrojov. STL je lingua franca 3D tlačových slicerov. Konverzia medzi nimi je jediným volaním.

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 kóduje iba trojuholníkové plochy. Ak váš OBJ súbor obsahuje štvoruholníkové alebo n-gónové plochy, exportér ich automaticky trianguluje pred zápisom. Ak chcete kontrolovať trianguláciu explicitne pred uložením, zavolajte mesh.triangulate() na každý mesh v scéne:

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):
    for entity in list(node.entities):
        if isinstance(entity, Mesh):
            tri_mesh = entity.triangulate()
            # Attach the triangulated mesh via add_entity
            node.add_entity(tri_mesh)
    for child in node.child_nodes:
        triangulate_all(child)

triangulate_all(scene.root_node)
scene.save("model_triangulated.stl", StlSaveOptions())

OBJ na glTF: Export pre web a herné enginy

glTF 2.0 je preferovaný výmenný formát pre renderery v reálnom čase, WebGL prehliadače a herné enginy ako Babylon.js, Three.js a Unity. GLB (binárna varianta) zabalí geometriu, textúry a materiály do jedného samostatného súboru, čo je jednoduchšie naservírovať cez HTTP.

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())

Formát je odvodený od prípony súboru: .gltf vytvorí pár JSON+binárny-buffer; .glb vytvorí jednosúborový binárny súbor. OBJ materiálové dáta (LambertMaterial, PhongMaterial) sa prenášajú do glTF PBR materiálovej reprezentácie, kde existuje ekvivalent.


STL na glTF: Od skenera alebo CAD výstupu k webu

STL súbory z 3D skenerov a CAD systémov sú bežné vstupy, ktoré je potrebné sprístupniť pre web. STL obsahuje iba trojuholníkovú geometriu a žiadne materiálové dáta, takže konverzia je jednoduchá.

from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions

scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())

Ak bolo STL vytvorené CAD nástrojom s neobvyklým súradnicovým systémom (Z-up vs Y-up), môžete pred uložením skontrolovať a opraviť transformáciu koreňového uzla:

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
root = scene.root_node
root.transform.set_euler_angles(-90.0, 0.0, 0.0)

scene.save("cad_export_yup.glb", GltfSaveOptions())

glTF na 3MF: Príprava na aditívnu výrobu

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")

Formát 3MF je detekovaný automaticky z .3mf prípony. Pre explicitnú kontrolu, odovzdajte a SaveOptions inštancia nakonfigurovaná pre 3MF.


Vzor hromadnej konverzie

V praxi konverzné úlohy pracujú s adresármi súborov namiesto jednotlivých súborov. Nasledujúci vzor spracuje priečinok s OBJ súbormi a konvertuje každý z nich na GLB, s ošetrením chýb na úrovni jednotlivých súborov, aby jeden chybný súbor neukončil celý beh.

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}")

Tento vzor sa prirodzene rozširuje na ďalšie páry zdroj/formát cieľa: zmeňte filter prípony a the SaveOptions class pre akúkoľvek kombináciu v tabuľke podpory vyššie.


Záver

Aspose.3D FOSS pre Python robí konverziu formátov jednoduchou: načítajte pomocou Scene.from_file, prípadne skontrolovať alebo upraviť graf scény, potom uložiť s vhodným SaveOptions. Knižnica interným spôsobom spracováva trianguláciu, normalizáciu súradníc a špecifické zvláštnosti formátu.

Pre úplný zoznam tried a metód pozri API Referenciu. Ak chcete podrobnejšie informácie o modeli grafu scény (uzly, siete, transformácie), pozri: