Въведение
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 е естествено подходящо за тази работа: скриптите на шейла са твърде хрупки, а пълните интеграции на инструментите DCC (дигитално съдържание) са прекалено тежки за обработка на комплекти. Това, което ви трябва, е библиотека, която може да зарежда всеки от тези формати, дава последователен график сцену и пише обратно към който и да е целеви формат без да се изисква GUI или графичен драйвер.
Върху него се появиха и други думи на Питон (aspose-3d-foss,Този ръководство показва най-честите маршрути за конверсия с пълни, изпълняеми примери на код.
Какви формати поддържат Aspose.3D FOSS?
| Форматът | Extension(s) | Натоварване | Спаси се | Общи случаи на употреба |
|---|---|---|---|---|
| OBJ | .obj | Да | Да | Изменение на инструменти за моделиране; .mtl Материални файлове, поддържани |
| STL | .stl | Да | Да | 3D printing, CAD export; binary and ASCII variants |
| ГЛТФ | .gltf, .glb | Да | Да | Интернет гледатели, игри двигатели; .glb Това е самоконтейнерният бинарни вариант. |
| COLLADA | .dae | Да | Да | Използване на анимационни инструменти; ColladaSaveOptions Подкрепя износа |
| 3MF | .3mf | Да | Да | Добавяне на метаданни, по-богати от STL |
Форматът на разкриване е автоматично от файловото разширение. формат-специфични опции класове (ObjLoadOptions, StlSaveOptions, GltfSaveOptionsТе са на разположение, когато имате нужда от фино-зелен контрол.
Забележка на FBX: Библиотеката включва частичен FBX токенизатор за внос. FB X не се препоръчва за производствени конвертиране работни потоци в това издание; вместо това използвайте OBJ или glTF като средно формати.
OBJ до STL: Подготвяне на модел за 3D печат
OBJ е най-често срещаният формат за изход от моделиране и скулптури. STL е lingua franca на 3D принтирани скицири. Конвертирането между тях е едно обаждане.
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 само кодира триъгълните лица. Ако вашият OBJ файл съдържа квадратни или n-gon лица, износителят ги триагулира автоматично преди да пишете. mesh.triangulate() На всяка маска на сцената:
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 към GLTF: Износ за уеб и игри двигатели
glTF 2.0 е предпочитаният формат за обмен на реални часове, WebGL гледачи и игри като Babylon.js, Three.JS и Unity. GLB (бинарната вариация) пакети геометрия, текстури и материали в един самосъдържащ файл, който е по-лесно да се обслужва чрез 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())
Форматът се извлича от разширението на файла: .gltf Изработва JSON + бинарна буфер двойка; .glb Използва се за изчисляване на данни от дневния ред (LambertMaterial, PhongMaterial2) се пренася през материалната представителна система на GLTF PBR, където съществува еквивалент.
STL до glTF: От сканер или CAD изход към уеб
STL файлове от 3D сканери и CAD системи са общи вход, който трябва да бъде направен уеб-видими. STl носи само триъгълна геометрия и няма материални данни, така че конвертирането е проста.
from aspose.threed import Scene
from aspose.threed.formats import GltfSaveOptions
scene = Scene.from_file("scan.stl")
scene.save("scan.glb", GltfSaveOptions())
Ако STL е произведен от CAD инструмент с необичайна координатна система (Z-up vs Y-Up), можете да проверите и коригирате трансформацията на коренния възел, преди да спестите:
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 до 3MF: Подготовка за добавката на производство
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 форматът се открива автоматично от .3mf за изрично управление, преминаване на SaveOptions Създаване на 3MF.
Бач конвертиране модел
В практиката, задачата за конвертиране работи на директории от файлове, а не индивидуални файла. Следващата шаблон се управлява с папка от OBJ файли и конструира всеки един към GLB, с обработка на грешки по файл така че един лош файл не прекъсва целия ход.
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}")
Този модел естествено се разширява до други изходни/целеви формати: промяна на филтра за разширение и SaveOptions клас за всяка комбинация в таблицата на подкрепата по-горе.
заключението
Aspose.3D FOSS за Python прави конвертирането на формат просто: зареждане с Scene.from_file, опционално проверяване или промяна на графиката на сцената, след това запазване с подходящия SaveOptions.Библиотеката работи с триъгълност, координираща нормализация и формат-специфични цирки вътрешно.
За пълния списък на класове и методи, вижте Огнено референтно.За да се влоши по-дълбоко на графичния модел на сцената (нодове, межди, трансформации), вижте:
- Сцена на класа: изтегляне, съхранение и метаданни на ниво сцена
- Класа на нода:Иерархия, трансформация и привързаност на субекта
- Класа на меша:• Вертекс, полигони и вертексични елементи
- Как да изтеглите 3D модели в Python
- ПИП: Aspose-3d-Foss