Pengantar

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 adalah sebuah aplikasi yang cocok untuk pekerjaan ini: skrip shell terlalu rapuh, dan integrasi alat DCC (creation digital content) penuh terlalu berat untuk pemrosesan batch. Apa yang Anda butuhkan adalah perpustakaan yang dapat memuat format apa pun dari format-format tersebut, memberi Anda grafik adegan yang konsisten, serta menulis kembali ke format target manapun tanpa memerlukan GUI atau driver grafis.

Aspose.3D FOSS untuk Python (aspose-3d-foss,Panduan ini menunjukkan jalur konversi yang paling umum dengan contoh kode lengkap dan dapat dijalankan.


Format apa yang didukung oleh Aspose.3D FOSS?

Format (Inggris)Extension(s)BebanSimpanKasus Penggunaan Umum
OBJ.objYa, aku tahu.Ya, aku tahu.Pertukaran dari alat pemodelan; .mtl file materi yang didukung
STL.stlYa, aku tahu.Ya, aku tahu.3D printing, CAD export; binary and ASCII variants
glTF (Penggunaan).gltf, .glbYa, aku tahu.Ya, aku tahu.Pemirsa web, mesin game; .glb adalah varian biner mandiri.
COLLADA.daeYa, aku tahu.Ya, aku tahu.Impor dari alat animasi; ColladaSaveOptions mendukung ekspor
3MF.3mfYa, aku tahu.Ya, aku tahu.Manufaktur aditif, metadata cetak yang lebih kaya daripada STL

Deteksi format otomatis dari ekstensi file. Kelas opsi khusus untuk format (ObjLoadOptions, StlSaveOptions, GltfSaveOptions) tersedia ketika Anda membutuhkan kontrol yang halus.

Catatan tentang FBX: Perpustakaan ini termasuk tokenizer FBX parsial untuk impor. FBx tidak disarankan untuk alur kerja konversi produksi dalam rilis ini; gunakan OBJ atau glTF sebagai format menengah sebaliknya.


OBJ ke STL: Mempersiapkan Model untuk Pencetakan 3D

OBJ adalah format output yang paling umum dari alat pemodelan dan pengukir. STL adalah lingua franca dari mesin pencetakan 3D. Konversi di antara mereka hanya dengan satu panggilan.

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 hanya mengkodekan wajah segitiga. Jika file OBJ Anda berisi quad atau n-gon wajah, pengekspor triangulasi mereka secara otomatis sebelum menulis. jika Anda ingin mengendalikan triangulasi eksplisit sebelum menyimpan, hubungi mesh.triangulate() pada setiap mesh di adegan:

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 ke glTF: Ekspor untuk Web dan Game Engine

glTF 2.0 adalah format pertukaran yang disukai untuk render real-time, pemirsa WebGL, dan mesin game seperti Babylon.js, Three. js, and Unity. GLB (varian biner) mengemas geometri, tekstur, serta bahan menjadi satu file mandiri, yang lebih mudah dilayani melalui 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())

Format disimpulkan dari ekstensi file: .gltf menghasilkan pasangan JSON+binary-buffer; .glb menghasilkan biner berformat satu file. data materi OBJ (LambertMaterial, PhongMaterial) ditransfer ke representasi material glTF PBR jika ada yang setara.


STL ke glTF: Dari Scanner atau CAD Output ke Web

File STL dari pemindai 3D dan sistem CAD adalah input umum yang perlu dibuat dapat dilihat di web. ST L hanya membawa geometri segitiga dan tidak ada data material, sehingga konversi mudah dilakukan.

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

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

Jika STL dihasilkan oleh alat CAD dengan sistem koordinat yang tidak biasa (Z-up vs Y- up), Anda dapat memeriksa dan memperbaiki transformasi node akar sebelum menyimpan:

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 sampai 3MF: Persiapan untuk Manufaktur Aditif

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

Format 3MF dideteksi secara otomatis dari .3mf untuk kontrol eksplisit, melewati sebuah SaveOptions instansi dikonfigurasi untuk 3MF.


Pola Konversi Batch

Dalam prakteknya, tugas konversi beroperasi pada direktori file daripada file individu. Pola berikut menangani folder dari file OBJ dan mengkonversi masing-masing ke GLB, dengan per-file penanganan kesalahan sehingga satu file yang salah tidak membatalkan seluruh run .

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

Pola ini secara alami meluas ke pasangan format sumber / target lainnya: ubah filter ekstensi dan pencetakan file. SaveOptions kelas untuk kombinasi apa pun dalam tabel pendukung di atas.


Kesimpulan

Aspose.3D FOSS untuk Python membuat konversi format mudah: muat dengan Scene.from_file, opsional memeriksa atau memodifikasi grafik adegan, kemudian menyimpan dengan yang sesuai SaveOptions.Perpustakaan menangani triangulasi, normalitas koordinat, dan quirks khusus format secara internal.

Untuk daftar lengkap kelas dan metode, lihat Referensi API.Untuk lebih mendalam pada model grafik adegan (nodes, mesh, transforms), lihat: