Aspose.3D FOSS untuk Java mendukung lima format file 3D: OBJ, STL, GTTF, GLB,dan FBX Posting ini adalah panduan praktis, format-per-format yang menunjukkan bagaimana untuk mengisi dan menyimpan masing-masing, pilihan apa yang tersedia, dan bagaimana menukar antara mereka.
Semua contoh menggunakan com.aspose.threed.* Paket yang :
import com.aspose.threed.*;
Ketergantungan Maven :
<dependency>
<groupId>org.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.5.0</version>
</dependency>Format Penduduk
Sebelum menyelam, berikut adalah gambaran cepat dari empat format yang didukung dan kasus penggunaan tipikal mereka.
| Formatnya | Perpanjangan | Importasi | Ekspor | Dukungan material | Sisi hierarki |
|---|---|---|---|---|---|
| OBJ | .obj | Ya ya | Ya ya | File dasar (MTL file) | Lantai |
| STL | .stl | Ya ya | Ya ya | Tidak ada | Lantai |
| GTS 2.0 | .gltf | Ya ya | Ya ya | PBR | penuh |
| GLB | .glb | Ya ya | Ya ya | PBR | penuh |
| FBX | .fbx | Ya ya | Tidak | kaya | penuh |
OBJ, STL, glTF, dan GLB mendukung kedua impor dan ekspor. FBX didukung untuk Hanya impor.GLB (binary glTF) diproduksi melalui GltfSaveOptions Dengan setContentType(FileContentType.BINARY).
OBJ: objek depan gelombang
OBJ adalah salah satu format mesh 3D yang paling banyak didukung. ia menyimpan geometri sebagai teks rata, dengan opsi .mtl file untuk bahan.
Mengisi file OBJ
Cara paling sederhana adalah untuk melewati jalur file langsung:
Scene scene = Scene.fromFile("model.obj");
Untuk lebih banyak kontrol, gunakan ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Ketika file OBJ merujuk pada file MTL (melalui a) mtllib direktif), perpustakaan akan mencoba untuk mengisi definisi material dari itu secara otomatis. file MTL harus berada di direktori yang sama dengan file OBJ atau pada jalur yang ditentukan dalam direksi.
Menjaga sebagai OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
BJ menggunakan kasus
- Pertukaran data mesh antara berbagai alat 3D.
- Mengimport model dari perpustakaan aset yang didistribusikan dalam format OBJ.
- Pemeriksaan cepat geometri tanpa hierarki skenario yang kompleks.
Tag: stereolithografi
STL adalah format standar untuk cetakan 3D. Ia mewakili geometri segitiga mentah tanpa bahan, warna, atau hierarki adegan. file STl datang dalam dua varian: ASCII (human-readable) dan binary (compact).
Mengisi file STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Menjimatkan sebagai STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Untuk mengontrol produksi, gunakan StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Pertimbangan STL
- STL hanya menyimpan geometri segitiga. bahan, tekstur, dan hierarki adegan tidak didukung dan ditarik ke ekspor.
- Ekspor dari STL Tidak Tiga sisi secara otomatis. STL biner hanya menulis 3 vertikal pertama dari setiap wajah poligon; muka quad dan n-gon diam-diam tertutup. ASCII STl menulis semua indeks vertex per muka, menghasilkan output yang rosak untuk muka non-triangle. Selalu gunakan mesh pre-triangulated (muka segitiga) saat mengekspor ke ST L.
- Binary STL jauh lebih kecil dari ASCII STl untuk model besar.
- STL adalah format pilihan ketika targetnya adalah printer 3D atau software slicer.
GTTF: Format Transmisinya
glTF adalah format modern yang dirancang untuk transmisi dan muat 3D konten, terutama di web dan dalam aplikasi waktu nyata. ia mendukung materi PBR, hierarki adegan, dan animasi.
Mengisi file gltf
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Menjimatkan sebagai glTF
Penyimpanan dasar menggunakan ekstensi file untuk menentukan format:
scene.save("output.gltf");
Untuk pengendalian yang lebih detail, penggunaan GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GSTFKPengaturan Detail
| Metode | Tujuan |
|---|---|
setFlipCoordinateSystem(boolean) | Flip sistem koordinat asas selama ekspor. berguna ketika konversi dari Y-up ke Z-Up atau sebaliknya. |
setPrettyPrint(boolean) | Format output JSON dengan indentasi untuk pembacaan. false Untuk ukuran file yang lebih kecil dalam produksi. |
GST menggunakan kasus
- Web-based 3D viewers (three.js, Babylon.js) dan lain sebagainya.
- Aplikasi real-time dan mesin game.
- Mengekalkan definisi material PBR di seluruh alat.
FBX: Filmbox (hanya diimport)
FBX adalah format milik Autodesk yang digunakan secara luas dalam pengembangan game dan penciptaan konten digital. Aspose.3D FOSS for Java mendukung FBx untuk: Hanya impor Eksport ke FBX tidak tersedia.
Hanya dengan FBX biner. Importir FBX hanya membaca file biner FB X. Melalui file ASCII FBx dibuang
ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). hierarki nod dan ekstraksi material dari FBX tidak sepenuhnya disahkan; adegan FB X kompleks mungkin tidak diisi sepenuh. animasi dan rigging tidak dilaksanakan.
Mengisi file FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Konversi FBX ke Format Lain
Karena ekspor FBX tidak didukung, konversi adegan FBx yang diimport ke glTF, GLB, OBJ, atau STL:
Scene scene = Scene.fromFile("character.fbx");
// Save as GLB
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene.save("character.glb", opts);
FBX menggunakan kasus
- Mengimport aset mesh statik dari alat Autodesk (Maya, 3ds Max) dan menukar ke format lain.
- Mengisi geometri biner FBX dan mengekspor kembali ke glTF/GLB, OBJ, atau STL.
Batch Konversi
Sebuah aliran kerja umum adalah menukar direktori file dari satu format ke format lain. berikut ini adalah pola untuk konversi batch:
import com.aspose.threed.*;
import java.io.File;
public class BatchConvert {
public static void main(String[] args) throws Exception {
File inputDir = new File("models/obj");
File outputDir = new File("models/gltf");
outputDir.mkdirs();
GltfSaveOptions saveOpts = new GltfSaveOptions();
saveOpts.setPrettyPrint(true);
File[] objFiles = inputDir.listFiles(
(dir, name) -> name.toLowerCase().endsWith(".obj")
);
if (objFiles == null) return;
for (File objFile : objFiles) {
String baseName = objFile.getName()
.replaceFirst("\\.obj$", "");
Scene scene = Scene.fromFile(objFile.getAbsolutePath());
String outPath = new File(outputDir, baseName + ".gltf")
.getAbsolutePath();
scene.save(outPath, saveOpts);
System.out.println("Converted: " + objFile.getName()
+ " -> " + baseName + ".gltf");
}
}
}
Ini membebankan setiap .obj file dalam direktori, setiap konversi menjadi glTF dengan output yang dicetak, dan menyimpan hasil. Anda dapat mengadaptasi pola ini untuk kombinasi sumber dan format sasaran apa pun.
Konversi Cross-Format Referensi
Jadual berikut menunjukkan apa yang harus diharapkan saat menukar antara format.
| Dari | Untuk | Geometri | Bahan | hierarki | Notis yang |
|---|---|---|---|---|---|
| OBJ | STL | disimpan | Kehilangan | N/A | STL tidak memiliki dukungan material. |
| OBJ | GTS / GLB | disimpan | Terjemahan untuk PBR | Lantai | MRT yang dipaparkan di mana mungkin |
| STL | OBJ | disimpan | Tidak ada | N/A | Tidak ada bahan dalam sumber |
| STL | GTS / GLB | disimpan | default | Lantai | Bahan yang digunakan secara default |
| GTTF | OBJ | disimpan | Sederhana | Flattened | PBR untuk bahan dasar |
| GTTF | STL | disimpan | Kehilangan | Flattened | Geometri hanya |
| FBX | OBJ | disimpan | Sederhana | Flattened | Materi yang Sederhana |
| FBX | STL | disimpan | Kehilangan | Flattened | Geometri hanya |
| FBX | GTS / GLB | disimpan | Terjemahan untuk PBR | disimpan | Fidelitas yang baik |
Panduan Konversi Umum
- Geometri umumnya disimpan di antara pasangan format, dengan satu pengecualian penting: ketika mengekspor ke STL, mesh harus terdiri sepenuhnya dari wajah segitiga. binary STl diam-diam menggerunkan quad dan n-gon muka ke 3 vertikal pertama mereka; ASCII ST L menghasilkan output yang rosak untuk wajah non-triangle.
- Bahan Bertahan hidup terbaik antara glTF dan FBX-impor adegan yang termasuk data material. Konversi ke STL selalu menurunkan bahan. konversi menjadi OBJ memudahkan bahan untuk model MTL dasar.
- Sisi hierarki disimpan di antara file format glTF. OBJ dan STL menghasilkan struktur rata. hierarki FBX dan ekstraksi material tidak sepenuhnya diperiksa dalam versi ini.
Menetapkan semuanya bersama-sama
Berikut adalah contoh lengkap yang memuat file OBJ, memeriksa nodusnya, dan mengekspor ke kedua glTF dan GLB:
import com.aspose.threed.*;
public class FormatWorkflow {
public static void main(String[] args) throws Exception {
// Load
Scene scene = Scene.fromFile("input.obj");
// Inspect
System.out.println("Nodes in scene:");
for (Node child : scene.getRootNode().getChildNodes()) {
System.out.println(" " + child.getName());
Transform t = child.getTransform();
System.out.println(" Translation: "
+ t.getTranslation());
}
// Export to glTF with options
GltfSaveOptions gltfOpts = new GltfSaveOptions();
gltfOpts.setPrettyPrint(true);
scene.save("output.gltf", gltfOpts);
// Export to GLB (binary glTF)
GltfSaveOptions glbOpts = new GltfSaveOptions();
glbOpts.setContentType(FileContentType.BINARY);
scene.save("output.glb", glbOpts);
System.out.println("Export complete.");
}
}
Kesimpulan
Aspose.3D FOSS untuk Java memberikan Anda API yang konsisten di berbagai format.:
- OBJ - Pertukaran mesh sederhana dengan bahan dasar.
- STL - Geometri-format hanya untuk pipa cetak 3D.
- GTS / GLB - format PBR-capable modern untuk penggunaan web dan waktu nyata.
GltfSaveOptionsDengansetContentType(FileContentType.BINARY)untuk produksi GLB. - FBX - hanya mengimpor; format yang kaya untuk pengisian aset dari mesin game dan alat DCC.
Menggunakan format-specifik load dan menyimpan kelas opsi (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions( ) ketika Anda membutuhkan kontrol halus atas proses impor atau ekspor.
Untuk lebih detail, kunjungi Informasi tentang Aspose.3D atau menelusuri sumbernya di GitHub.