Uvod u članak

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 prirodan za ovaj posao: skripti shella su previše krhki, a integracije DCC (digitalno stvaranje sadržaja) alata su preteže za procesiranje batša. Ono što vam treba jest knjižnica koja može učitati bilo koji od ovih formata, dati vas dosljedan grafikon scene i napisati natrag u bilo kojem ciljnom formatu bez potrebe za grafičkim korisničkim interfejsom ili upravljačem grafike.

3D FOSS za Python (aspose-3d-foss,Ovaj vodič pokazuje najčešće staze konverzije s potpunim, pokretnim primjerima koda.


Koje formate podržava Aspose.3D FOSS?

Format:Extension(s)Uređaj za prevoz:SačuvatiUobičajeni slučajevi upotrebe
OBJ.obj- Da, u redu.- Da, u redu.U tom smislu, u skladu s člankom 21. stavkom 1. točka (a) Uredbe (EU) br. 1303/2013:; .mtl Podržane materijalne datoteke
STL.stl- Da, u redu.- Da, u redu.3D printing, CAD export; binary and ASCII variants
GTF-a.gltf, .glb- Da, u redu.- Da, u redu.Web gledalaci, motori za igre; .glb je samostalna binarna varijanta
COLLADA.dae- Da, u redu.- Da, u redu.Uvoz iz alata za animaciju; ColladaSaveOptions podržava izvoz
3MF.3mf- Da, u redu.- Da, u redu.Aditivna proizvodnja, bogatiji metapodatci od STL-a

Detekcija formata je automatska iz proširenja datoteke.ObjLoadOptions, StlSaveOptions, GltfSaveOptions) dostupne su kada je potrebna kontrola u finim zrncima.

Napomena o FBX-u: U knjižnici je uključen djelomični FBX tokenizer za uvoz. FBx se ne preporučuje za radne protoke prilikom proizvodnje u ovom izdanju; umjesto toga koristite OBJ ili glTF kao intermediarne formate.


OBJ-STL: Priprema modela za 3D tisak

OBJ je najčešći format izdanja od alata za modeliranje i skulpturiranje. STL je lingua franca 3D štampača. Konverzija između njih je jedan poziv.

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 kodira samo trokutne lica. Ako OBJ datoteka sadrži četvorokove ili n-gon lice, izvoznik ih automatski triangulacije prije pisanja. mesh.triangulate() na svakoj mreži u sceni:

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 za glTF: izvoz za web i igračke motore

glTF 2.0 je omiljeni format za razmjenu za renderere u realnom vremenu, WebGL gledalace i motore igara kao što su Babylon.js, Three. js i Unity. GLB (binarna varijanta) pakira geometriju, teksture i materijale u jednu samostalnu datoteku koja se lakše služi preko HTTP-a.

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

Format je izveden iz proširenja datoteke: .gltf U ovom slučaju, u skladu s člankom 15. stavkom 1. točkom (a) i podstavkom 7.; .glb Objavljuje se u jednom datoteku.LambertMaterial, PhongMaterial(Stoga, u slučaju da se ne može utvrditi odgovarajuća metoda za izračunavanje vrijednosti) preuzima se na prikaz glTF PBR materijala ako postoji ekvivalent.


STL na glTF: Od skenera ili CAD izdanja do web-a

STL datoteke iz 3D skenera i CAD sustava su uobičajeni ulazi koji se moraju učiniti vidljivim na webu. ST L nosi samo geometriju trokutova i nema materijalnih podataka, tako da je pretvaranje jednostavno.

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

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

Ako je STL proizveden CAD alatom s neobičnim koordinatnim sustavom (Z-up vs. Y- up), možete pregledati i ispraviti transformiranje korijenog čvorka prije pohranjivanja:

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

U slučaju da se proizvodnja ne provodi u skladu s člankom 7. stavkom 1. točkom (a) ovog članka, podnositelj zahtjeva može zatražiti od strane proizvođača:

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 format se automatski otkriva iz .3mf Za izričitu kontrolu, prođite s SaveOptions U slučaju da je to moguće, mora se koristiti:.


Uzorak pretvaranja serije

U praksi, zadaci konverzije rade na direktorijima datoteka umjesto pojedinačnih datotek. Sljedeći uzorak rukovodi fasciklom OBJ datotanaka i pretvara svaku u GLB, s obradom grešaka po datoteci tako da jedna loša datotna ne prekida cijeli pokretanje.

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

Ovaj obrazac se prirodno proširuje i na druge parove izvor/ciljni format: promijenite filter za proširenje i prikažite datoteke koje su u pitanju. SaveOptions U ovom slučaju, u skladu s člankom 77. stavkom 1. točka (a) Uredbe (EU) br. 575/2013, mora se primjenjivati sljedeća pravila:.


Izvješće

Aspose.3D FOSS za Python čini konverziju formata jednostavnom: učitavanje s Scene.from_file, opcionalno pregledati ili modificirati grafikon scene, a zatim sačuvati s odgovarajućim SaveOptions.Biblioteka se bavi triangulacijom, normalizacijom koordinata i specifičnim posebnostima formata.

Za potpuni popis klasa i metoda, pogledajte članak 1. Odgovor na API.Za dublje istraživanje grafičkog modela scene (začepi, mrežice, transformira) pogledajte: