Aspose.3D FOSS untuk Java menyokong lima format fail 3D: OBJ, STL, GTTF, GLB,dan FBX (hanya diimport). posting ini adalah panduan praktikal, format-per-format yang menunjukkan bagaimana untuk memuat naik dan menyimpan masing-masing, pilihan apa yang tersedia, dan bagaimana menukar antara mereka.
Semua contoh menggunakan com.aspose.threed.* Pakej yang :
import com.aspose.threed.*;
Ketergantungan Maven :
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Format Pemandangan
Sebelum menyelam, di sini adalah gambaran keseluruhan yang cepat daripada empat format yang disokong dan kes penggunaan khas mereka.
| Format | Perpanjangan | Import | Eksport | Sokongan bahan | Persembahan hierarki |
|---|---|---|---|---|---|
| OBJ | .obj | Ya ya | Ya ya | fail utama (MTL file) | Lapisan |
| STL | .stl | Ya ya | Ya ya | Tiada | Lapisan |
| Perbezaan GTTF 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 menyokong kedua-dua import dan eksport. FBX disokong untuk Import sahaja.GLB (binary glTF) dihasilkan melalui GltfSaveOptions dengan setContentType(FileContentType.BINARY).
Tag: objek hadapan gelombang
OBJ adalah salah satu format mesh 3D yang paling banyak disokong. ia menyimpan geometri sebagai teks rata, dengan opsyen .mtl fail rakan untuk bahan.
Pengisian fail OBJ
Kaedah yang paling mudah ialah untuk melepasi laluan fail secara langsung:
Scene scene = Scene.fromFile("model.obj");
Untuk lebih banyak kawalan, gunakan ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Apabila fail OBJ merujuk kepada fail MTL (dengan mtllib direktif), perpustakaan akan cuba untuk memuatkan definisi bahan daripadanya secara automatik. fail MTL hendaklah berada dalam direktori yang sama dengan fail OBJ atau di laluan yang dinyatakan dalam Direktif.
Menyelamatkan sebagai OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
UPS menggunakan kes
- Pertukaran data mesh antara pelbagai alat 3D.
- Mengimport model daripada perpustakaan aset yang diedarkan dalam format OBJ.
- Pemeriksaan geometri yang cepat tanpa hierarki adegan yang kompleks.
Tag: stereolithografi
STL ialah format standard untuk percetakan 3D. Ia mewakili geometri segitiga mentah tanpa bahan, warna, atau hierarki adegan. fail STl datang dalam dua varian: ASCII (baca manusia) dan binari (kompak).
Mengisi fail 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 mengawal pengeluaran, gunakan StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Pertimbangan STL
- STL hanya menyimpan geometri segitiga. bahan, tekstur dan hierarki adegan tidak disokong dan dibuang ke eksport.
- STL Eksport boleh Tidak Tiga sudut secara automatik. STL binari hanya menulis 3 vertikal pertama setiap muka poligon; muka quad dan n-gon diam-diam tergelincir. ASCII ST L menulis semua indeks vertex per muka, menghasilkan output yang rosak untuk muka bukan triangle. Sentiasa menggunakan mesh pra-triangul (muka segitiga) apabila mengeksport ke STl.
- STL binari adalah lebih kecil daripada ASCII STl untuk model besar.
- STL ialah format pilihan apabila sasaran adalah 3D printer atau slicer perisian.
GTTF : Format Penghantaran
glTF ialah format moden yang direka untuk penghantaran dan muat turun kandungan 3D secara berkesan, terutamanya di web dan dalam aplikasi masa nyata. ia menyokong bahan PBR, hierarki adegan, dan animasi.
Pengisian fail glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Menjimatkan sebagai glTF
Penyimpanan asas menggunakan perpanjangan fail untuk menentukan format:
scene.save("output.gltf");
Untuk kawalan terperinci, penggunaan GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
GSTFKPenggunaan butiran
| Kaedah | Tujuan |
|---|---|
setFlipCoordinateSystem(boolean) | Flip sistem koordinat sumbu semasa eksport. berguna apabila menukar daripada Y-up kepada Z-Up atau sebaliknya. |
setPrettyPrint(boolean) | Format output JSON dengan indentasi untuk kebolehbacaan. false untuk saiz fail yang lebih kecil dalam pengeluaran. |
GST menggunakan kes-kes
- Pemandangan 3D berasaskan web (three.js, Babylon.js).
- Aplikasi masa nyata dan enjin permainan.
- Mengekalkan definisi bahan PBR di seluruh alat.
FBX: Filem kotak (hanya import)
FBX ialah format milik Autodesk yang digunakan secara meluas dalam pembangunan permainan dan penciptaan kandungan digital. Aspose.3D FOSS for Java menyokong FBx untuk Import sahaja - Eksport ke FBX tidak tersedia.
Hanya FBX sahaja. FBX importor hanya membaca fail binari FB X. Melalui fail ASCII FBx melemparkan
ImportException("ASCII FBX format not yet supported - only binary FBX is supported"). hierarki nod dan pengekstrakan bahan daripada FBX tidak sepenuhnya disahkan; adegan FB X yang kompleks mungkin tidak diisi sepenuh.
Mengecas fail FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Menukar FBX kepada format lain
Oleh kerana eksport FBX tidak disokong, menukar 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 kes-kes
- Mengimport aset mesh statik daripada alat Autodesk (Maya, 3ds Max) dan menukar kepada format lain.
- Muat naik geometri binari FBX dan mengeksport semula ke glTF/GLB, OBJ, atau STL.
Batch Perubahan
Aliran kerja yang biasa ialah menukar direktori fail keseluruhan dari satu format ke format lain. berikut adalah corak untuk penukaran 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 fail dalam direktori, setiap satu ditukar kepada glTF dengan output yang dicetak, dan menyimpan hasil. anda boleh menyesuaikan corak ini untuk mana-mana gabungan format sumber dan sasaran.
Perkataan Konversi Cross-Format
Jadual berikut menunjukkan apa yang perlu diharapkan apabila menukar antara format.
| Daripada | kepada | Geometri | Bahan-bahan | hierarki | Nota |
|---|---|---|---|---|---|
| OBJ | STL | disimpan | Kehilangan | N/A | STL tidak mempunyai sokongan material |
| OBJ | Perbezaan antara GLTF dan GLB | disimpan | Berubah kepada PBR | Lapisan | Bahan-bahan MTL dipaparkan di mana mungkin |
| STL | OBJ | disimpan | Tiada | N/A | Tiada bahan dalam sumber |
| STL | Perbezaan antara GLTF dan GLB | disimpan | Perkataan default | Lapisan | Bahan yang digunakan secara lalai |
| GTTF | OBJ | disimpan | Sederhana | Percuma | PBR kepada bahan asas |
| GTTF | STL | disimpan | Kehilangan | Percuma | Geometri sahaja |
| FBX | OBJ | disimpan | Sederhana | Percuma | Pembersihan bahan |
| FBX | STL | disimpan | Kehilangan | Percuma | Geometri sahaja |
| FBX | Perbezaan antara GLTF dan GLB | disimpan | Berubah kepada PBR | disimpan | Kebaikan yang baik |
Panduan Konversi Umum
- Geometri biasanya disimpan di antara pasangan format, dengan satu pengecualian penting: apabila mengeksport ke STL, mesh mesti terdiri sepenuhnya daripada muka segitiga. binari ST L diam-diam menggerunkan muka quad dan n-gon ke 3 vertikal pertama mereka; ASCII STl menghasilkan output yang rosak untuk muka bukan segita.
- Bahan-bahan selamat hidup antara glTF dan FBX-impor adegan yang termasuk data bahan. penukaran kepada STL sentiasa meneteskan bahan-bahan. Penukuran kepada OBJ menyederhanakan bahan kepada model MTL asas.
- Persembahan hierarki disimpan antara fail format glTF. OBJ dan STL menghasilkan struktur rata. hierarki FBX dan ekstraksi bahan tidak sepenuhnya disahkan dalam versi ini.
Letakkan semua bersama-sama
Berikut ialah contoh lengkap yang memuat naik fail OBJ, memeriksa nodusnya, dan mengeksport kepada kedua-dua 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.");
}
}
Kesimpulannya
Aspose.3D FOSS untuk Java memberi anda API yang konsisten di pelbagai format.:
- OBJ - pertukaran mesh mudah dengan bahan asas.
- STL - format geometri sahaja untuk paip percetakan 3D.
- Perbezaan / GLB - format PBR moden untuk penggunaan web dan masa nyata.
GltfSaveOptionsdengansetContentType(FileContentType.BINARY)untuk pengeluaran GLB. - FBX - hanya mengimport; format yang kaya untuk pengecasan aset daripada enjin permainan dan alat DCC.
Menggunakan format-specifik beban dan menyimpan kelas opsyen (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions(a) apabila anda memerlukan kawalan yang halus terhadap proses import atau eksport.
Untuk maklumat lanjut, sila rujuk kepada Laporan 3D atau melayari sumber di GitHub.