Johdanto
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 on luonnollinen valinta tähän työhön: komentojonot ovat liian haavoittuvia, ja täysimittaiset DCC (digital content creation) -työkalujen integraatiot ovat liian raskaita eräajoon. Tarvitset kirjaston, joka osaa ladata mitä tahansa näistä formaateista, antaa sinulle yhdenmukaisen kohtausgraafin ja kirjoittaa sen takaisin mihin tahansa kohdeformaattiin ilman, että GUI:ta tai grafiikkadriveriä tarvitaan.
Aspose.3D FOSS Python varten (aspose-3d-foss, MIT-lisenssi) kattaa sen aukon. Tämä opas näyttää yleisimmät muunnospolut täydellisillä, suoritettavilla koodiesimerkeillä.
Mitä formaatteja Aspose.3D FOSS tukee?
| Muoto | Extension(s) | Lataa | Tallenna | Yleinen käyttötapaus |
|---|---|---|---|---|
| Wavefront OBJ | .obj | Kyllä | Kyllä | Vaihda mallinnustyökaluista; .mtl materiaalitiedostot tuettu |
| STL | .stl | Kyllä | Kyllä | 3D printing, CAD export; binary and ASCII variants |
| glTF 2.0 / GLB | .gltf, .glb | Kyllä | Kyllä | Web-selaimet, pelimoottorit; GLB on itsenäinen binäärimuunnelma |
| COLLADA | .dae | Kyllä | Kyllä | Tuo animaatiotyökaluista; ColladaSaveOptions tukee vientiä |
| 3MF | .3mf | Kyllä | Kyllä | Lisävalmistus, rikkaampi tulostusmetatieto kuin STL |
Tiedostopäätteestä tapahtuva formaatin tunnistus on automaattinen. Formaattiin spesifiset asetusluokat (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) ovat saatavilla, kun tarvitset hienojakoista hallintaa.
Huomautus FBX:stä: Kirjasto sisältää osittaisen FBX-tokenisoijan tuontia varten. FBX ei ole suositeltavaa tuotantomuunnosprosessissa tässä julkaisussa; käytä sen sijaan OBJ- tai glTF-muotoja väliformaateina.
OBJ to STL: Mallin valmistelu 3D‑tulostusta varten
OBJ on yleisin tulostusmuoto mallinnus- ja veistotyökaluista. STL on 3D-tulostuksen leikkausohjelmien lingua franca. Niiden välinen muuntaminen tapahtuu yhdellä kutsulla.
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 koodaa vain kolmioita. Jos OBJ-tiedostossasi on nelikulmio- tai n-gon-pintoja, vienti muuntaa ne automaattisesti kolmioiksi ennen kirjoittamista. Jos haluat hallita kolmiointia eksplisiittisesti ennen tallentamista, kutsu mesh.triangulate() kullakin verkolla (mesh) kohtauksessa:
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 → glTF: Vienti verkkoon ja pelimoottoreihin
glTF 2.0 on ensisijainen vaihtomuoto reaaliaikaisille renderöijille, WebGL‑katselijoille ja pelimoottoreille, kuten Babylon.js, Three.js ja Unity. GLB (binäärinen variantti) pakkaa geometrian, tekstuurit ja materiaalit yhdeksi itsenäiseksi tiedostoksi, mikä on helpompi tarjoilla HTTP:n kautta.
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())
Formaatti päätellään tiedostopäätteestä: .gltf tuottaa JSON+binary-puskuriparin; .glb tuottaa yhden tiedoston binäärin. OBJ-materiaali data (LambertMaterial, PhongMaterial) siirretään glTF PBR -materiaaliesitykseen, jos vastaava on olemassa.
STL → glTF: Skannerin tai CAD‑tulosteen siirto verkkoon
STL‑tiedostot 3D‑skannereista ja CAD‑järjestelmistä ovat yleisiä syötteitä, jotka täytyy tehdä verkossa katsottaviksi. STL sisältää vain kolmio‑geometrian eikä materiaaliaineistoa, joten muunnos on suoraviivaista.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Jos STL on tuotettu CAD-työkalulla, jossa on epätavallinen koordinaattijärjestelmä (Z-up vs Y-up), voit tarkastaa ja korjata juurisolmun muunnoksen ennen tallentamista:
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 → 3MF: Valmistautuminen lisävalmistukseen
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")
3MF-muoto tunnistetaan automaattisesti tiedostopäätteestä. .3mf Jos haluat eksplisiittistä hallintaa, anna a SaveOptions instanssi on konfiguroitu 3MF:lle.
Erämuunnoksen malli
Käytännössä muunnostehtävät toimivat tiedostokansioissa yksittäisten tiedostojen sijaan. Seuraava malli käsittelee OBJ-tiedostokansion ja muuntaa jokaisen tiedoston GLB:ksi, sisältäen tiedostokohtaisen virheenkäsittelyn, jotta yksi viallinen tiedosto ei keskeytä koko suorituksen.
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}")
Tämä malli laajenee luonnollisesti muihin lähde/kohde -muotojen pareihin: muuta laajennussuodatinta ja SaveOptions luokka mille tahansa yhdistelmälle yllä olevassa tukitaulukossa.
Yhteenveto
Aspose.3D FOSS for Python tekee formaatin muuntamisesta suoraviivaista: lataa Scene.from_file, tarkastele tai muokkaa kohtausgrafiikkaa halutessasi, ja tallenna sitten sopivalla SaveOptions. Kirjasto käsittelee triangulaation, koordinaattien normalisoinnin ja formaattikohtaiset erityispiirteet sisäisesti.
Luokkien ja metodien täydellisestä luettelosta katso API Reference. Jos haluat syventyä kohtausgrafiikkamalliin (solmut, verkot, muunnokset), katso:
- Luokka Scene: lataus, tallennus ja kohtauksen tasoinen metadata
- Luokka Node: hierarkia, muunnokset, entiteettien liittäminen
- Luokka Mesh: vertex data, polygonit, vertex elements
- Kuinka ladata 3D-malleja Python:ssa
- PyPI: aspose-3d-foss