Bevezetés

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.

A Python természetes alkalmazkodás a munkára: a shell-szkriptek túl törékenyek, és az teljes DCC (digitális tartalomteremtés) eszköz integrációk túlságosan nehézséget jelentnek a tételfeldolgozáshoz. Amit szükség van egy olyan könyvtárra, amely bármelyik formátumot betölthet, következetes jeleneti grafikont adhat Önnek, valamint visszaírhatja bármilyen célformátumban anélkül, hogy GUI vagy grafikai driver lenne szükséges.

3D FOSS Pythonhoz (aspose-3d-foss,Ez a útmutató bemutatja a leggyakoribb konverziós ösvényeket teljes, futtatható kód példákkal.


Milyen formátumokat támogat a Aspose.3D FOSS?

FormátumExtension(s)Töltési kapacitás:MegőrzésKözös felhasználási eset
OBJ.objIgen, igen. - Az is jó.Igen, igen. - Az is jó.A modellezési eszközök közötti cserék; .mtl támogatott anyagi fájlok
STL.stlIgen, igen. - Az is jó.Igen, igen. - Az is jó.3D printing, CAD export; binary and ASCII variants
glTF-t.gltf, .glbIgen, igen. - Az is jó.Igen, igen. - Az is jó.Web néző, játékmotor; .glb az önálló bináris változat;
COLLADA.daeIgen, igen. - Az is jó.Igen, igen. - Az is jó.Az animációs eszközökből történő import; ColladaSaveOptions export támogatása.
3MF.3mfIgen, igen. - Az is jó.Igen, igen. - Az is jó.Aditív gyártás, a nyomtatott metaadatokban gazdagabb mint az STL-ben.

A formátum felismerése automatikusan történik a fájl kiterjesztésénél. Formátumspecifikus opciós osztályok (ObjLoadOptions, StlSaveOptions, GltfSaveOptionsA szennyező anyagokat a vizsgálat során kell kezelni.

Megjegyzés a FBX-ről: A könyvtár tartalmaz egy részleges FBX tokenizer import. FBx nem ajánlott a termelés átalakítás munkafolyamatok ebben az kiadásban; használja OBJ vagy glTF, mint közbenső formátumok helyett.


OBJ és STL: 3D-nyomtatásra való modell elkészítése

Az OBJ a modellezés és szobrászat eszközeinek leggyakoribb kimeneti formátuma. A STL a 3D-s nyomtató szeletelők lingua francaja. Közöttük történő konverzió egyetlen hívás alatt történik.

from aspose.threed import Scene
from aspose.threed.formats import StlSaveOptions

scene = Scene.from_file("model.obj")

opts = StlSaveOptions()
scene.save("model.stl", opts)

Ha az OBJ fájlt tartalmaz négyes vagy n-gon arcot, a kivitel automatikusan triangulálja őket írás előtt. Ha szeretné irányítani a triangulació kifejezetten mentése előtt hívja meg: mesh.triangulate() a jelenet minden hálóján:

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 a glTF-hez: Exportálás webes és játékmotorokhoz

A glTF 2.0 a legkedveltebb interchange formátum az valós idejű rendererek, WebGL nézők és játékmotorok számára, mint például Babylon.js, Three. js és Unity. A GLB (a bináris változat) egy önálló fájlba csomagolja a geometria, textúrák és anyagok adatait, ami könnyebben szolgálható HTTP-n keresztül.

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

A formátum a fájl kiterjesztéséből következik: .gltf a JSON+bináris-buffer párt generálja; .glb az egyes fájlokból álló bináris adatokat állítja elő.LambertMaterial, PhongMaterial) átadják a glTF PBR-anyagok reprezentációjába, ha van egy megfelelő.


STL-től glTF: a szkennertől vagy CAD kimenetelről a webre

A 3D-s szkennerek és CAD rendszerek STL fájljai olyan közös bemenetek, amelyeket webes megjelenítésre kell tenni. Az ST L csak háromszög geometria és nincs anyagi adatot tartalmaz, így a konvertáció egyszerű.

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

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

Ha az STL-t egy szokatlan koordinátarendszerű CAD eszköz készítette (Z-up vs. Y- up), akkor a megőrzés előtt ellenőrizheti és kijavíthatja a gyökércsomó transformációját:

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-tól 3MF: Adatanyaggyártásra való felkészítés

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

A 3MF formátum automatikusan érzékelhető a .3mf A kifejezett ellenőrzéshez egy SaveOptions 3MF-re konfigurált példány.


Sorozatkonverziós minták

A konvertációs feladatok gyakorlatilag a fájlok, nem pedig az egyes fájlokat tartalmazó címkékben zajlanak. Az alábbi mintában egy mappát kezelnek OBJ-fájlákból és mindegyiket GLB-be alakítják át, adatbázisban hibás kezelés mellett, így egyetlen rossz fáji nem törli el az egész futtatást.

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

Ez a mintázat természetesen kiterjed más forrást/célformátum párokra is: változtassa meg az bővítési szűrőt és a SaveOptions az előző táblázatban szereplő bármely kombinációhoz tartozó osztály.


A Bizottság következtetései

Aspose.3D FOSS Python teszi a formátum átalakítás egyszerű: töltse be, hogy Scene.from_file, ha lehet, ellenőrizze vagy módosítsa a jelenet grafikont, majd mentse meg az adott képernyővel. SaveOptions.A könyvtár a háromszöglet, koordináták normalizálása és formátum-specifikus furcsaságok kezelését intézi.

A osztályok és módszerek teljes listája a következőkben található: API hivatkozás.A jelenet grafikon modelljére (csomók, hálózatok, transformációk) részletesebben nézzünk: