Aspose.3D FOSS untuk Java menyokong lima format fail 3D: OBJ, STL, glTF, GLB, dan FBX (import sahaja).
Semua contoh menggunakan com.aspose.threed.* pakej:
import com.aspose.threed.*;
Kebergantungan Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
Lanskap Format
Sebelum menyelami, berikut ialah gambaran ringkas tentang empat format yang disokong dan kegunaan tipikalnya.
| Format | Sambungan | Import | Eksport | Sokongan Bahan | Hierarki Adegan |
|---|---|---|---|---|---|
| OBJ | .obj | Ya | Ya | Asas (fail MTL) | Rata |
| STL | .stl | Ya | Ya | Tiada | Rata |
| glTF 2.0 | .gltf | Ya | Ya | PBR | Penuh |
| GLB | .glb | Ya | Ya | PBR | Penuh |
| FBX | .fbx | Ya | Tidak | Kaya | Penuh |
OBJ, STL, glTF, dan GLB menyokong import dan eksport. FBX disokong untuk import sahaja. GLB (binary glTF) dihasilkan melalui GltfSaveOptions dengan setContentType(FileContentType.BINARY).
OBJ: Wavefront Object
OBJ adalah salah satu format mesh 3D yang paling banyak disokong. Ia menyimpan geometri sebagai teks biasa, dengan pilihan .mtl fail pendamping untuk bahan.
Memuatkan Fail OBJ
Pendekatan paling mudah ialah menghantar laluan fail secara langsung:
Scene scene = Scene.fromFile("model.obj");
Untuk kawalan yang lebih, gunakan ObjLoadOptions:
ObjLoadOptions opts = new ObjLoadOptions();
Scene scene = Scene.fromFile("model.obj", opts);
Apabila fail OBJ merujuk kepada fail MTL (melalui mtllib arahan), perpustakaan akan cuba memuatkan definisi bahan daripadanya secara automatik. Fail MTL seharusnya berada dalam direktori yang sama dengan fail OBJ atau pada laluan yang ditentukan dalam arahan.
Menyimpan sebagai OBJ
Scene scene = Scene.fromFile("input.fbx");
scene.save("output.obj");
Kes Penggunaan OBJ
- Menukar data mesh antara pelbagai alat 3D.
- Mengimport model dari perpustakaan aset yang mengedarkan dalam format OBJ.
- Pemeriksaan cepat geometri tanpa hierarki adegan yang kompleks.
STL: Stereolithography
STL adalah format standard untuk pencetakan 3D. Ia mewakili geometri segitiga mentah tanpa bahan, warna, atau hierarki adegan. Fail STL datang dalam dua varian: ASCII (boleh dibaca manusia) dan binari (padat).
Memuatkan Fail STL
// Simple load
Scene scene = Scene.fromFile("part.stl");
// With explicit options
StlLoadOptions opts = new StlLoadOptions();
Scene scene = Scene.fromFile("part.stl", opts);
Menyimpan sebagai STL
Scene scene = Scene.fromFile("model.obj");
scene.save("output.stl");
Untuk mengawal output, gunakan StlSaveOptions:
StlSaveOptions opts = new StlSaveOptions();
scene.save("output.stl", opts);
Pertimbangan STL
- Fail STL hanya mengandungi geometri bersegitiga. Bahan, tekstur, dan hierarki adegan hilang semasa eksport.
- STL binari jauh lebih kecil berbanding STL ASCII untuk model berskala besar.
- STL adalah format pilihan apabila sasaran ialah pencetak 3D atau perisian pemotong.
glTF: Format Penghantaran GL
glTF ialah format moden yang direka untuk penghantaran dan pemuatan kandungan 3D yang cekap, terutamanya di web dan dalam aplikasi masa nyata. Ia menyokong bahan PBR, hierarki adegan, dan animasi.
Memuatkan Fail glTF
Scene scene = Scene.fromFile("scene.gltf");
// With options
GltfLoadOptions opts = new GltfLoadOptions();
Scene scene = Scene.fromFile("scene.gltf", opts);
Menyimpan sebagai glTF
Simpanan asas menggunakan sambungan fail untuk menentukan format:
scene.save("output.gltf");
Untuk kawalan terperinci, gunakan GltfSaveOptions:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Butiran GltfSaveOptions
| Kaedah | Tujuan |
|---|---|
setFlipCoordinateSystem(boolean) | Balikkan paksi sistem koordinat semasa eksport. Berguna apabila menukar dari Y-up ke Z-up atau sebaliknya. |
setPrettyPrint(boolean) | Formatkan JSON output dengan penjarakan untuk kebolehbacaan. Tetapkan kepada false untuk saiz fail yang lebih kecil dalam produksi. |
Kes Penggunaan glTF
- Penonton 3D berasaskan web (three.js, Babylon.js).
- Aplikasi masa nyata dan enjin permainan.
- Menjaga definisi bahan PBR merentasi alat.
FBX: Filmbox (Import Sahaja)
FBX ialah format proprietari oleh Autodesk yang banyak digunakan dalam pembangunan permainan dan penciptaan kandungan digital. Ia menyokong hierarki adegan yang kaya, bahan, dan animasi. Aspose.3D FOSS for Java supports FBX for import sahaja – eksport ke FBX tidak tersedia.
Memuatkan Fail FBX
Scene scene = Scene.fromFile("character.fbx");
// With options
FbxLoadOptions opts = new FbxLoadOptions();
Scene scene = Scene.fromFile("character.fbx", opts);
Menukar FBX ke Format Lain
Memandangkan eksport FBX tidak disokong, tukar 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);
Kes Penggunaan FBX
- Mengimport aset dari alat Autodesk (Maya, 3ds Max) dan menukarnya ke format lain.
- Memuatkan watak berrig dan adegan beranimasi untuk dieksport semula ke glTF/GLB.
Penukaran Pukal
Aliran kerja biasa ialah menukar seluruh direktori fail dari satu format ke format lain. Berikut ialah pola untuk penukaran pukal:
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 memuatkan setiap .obj fail dalam direktori, menukarkannya setiap satu ke glTF dengan output yang diformat cantik, dan menyimpan hasilnya. Anda boleh menyesuaikan corak ini untuk sebarang kombinasi format sumber dan sasaran.
Rujukan Penukaran Silang-Format
Jadual berikut menunjukkan apa yang dijangka apabila menukar antara format.
| Dari | Ke | Geometri | Bahan | Hierarki | Nota |
|---|---|---|---|---|---|
| OBJ | STL | Terpelihara | Hilang | N/A | STL tidak mempunyai sokongan bahan |
| OBJ | glTF/GLB | Dipertahankan | Ditukar kepada PBR | Rata | Bahan MTL dipetakan bila boleh |
| STL | OBJ | Dipertahankan | Tiada | N/A | Tiada bahan dalam sumber |
| STL | glTF/GLB | Dipertahankan | Lalai | Rata | Bahan lalai diterapkan |
| glTF | OBJ | Dipertahankan | Dipermudah | Diratakan | PBR ke bahan asas |
| glTF | STL | Dipertahankan | Hilang | Diratakan | Geometri sahaja |
| FBX | OBJ | Dipertahankan | Disederhanakan | Diratakan | Penyederhanaan bahan |
| FBX | STL | Dipertahankan | Hilang | Diratakan | Hanya geometri |
| FBX | glTF/GLB | Dipertahankan | Ditukar kepada PBR | Dipertahankan | Kesetiaan yang baik |
Garis Panduan Penukaran Umum
- Geometri sentiasa dipelihara di semua pasangan format.
- Bahan berfungsi paling baik antara glTF dan FBX, yang kedua-duanya menyokong model bahan yang kaya. Menukar ke STL selalu menghilangkan bahan. Menukar ke OBJ mempermudahkan bahan kepada model MTL asas.
- Hierarki adegan dipelihara antara glTF dan FBX. OBJ dan STL menghasilkan struktur rata.
Menyatukan Semua
Berikut ialah contoh lengkap yang memuatkan fail OBJ, memeriksa nodnya, dan mengeksport ke 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.");
}
}
Ringkasan
Aspose.3D FOSS for Java memberi anda API yang konsisten merentasi pelbagai format. Titik utama:
- OBJ – pertukaran mesh mudah dengan bahan asas.
- STL – format hanya geometri untuk aliran kerja pencetakan 3D.
- glTF / GLB – format moden yang menyokong PBR untuk penggunaan web dan masa nyata. Gunakan
GltfSaveOptionsdengansetContentType(FileContentType.BINARY)untuk output GLB. - FBX – import sahaja; format kaya untuk memuatkan aset daripada enjin permainan dan alat DCC.
Gunakan kelas pilihan muat dan simpan khusus format (ObjLoadOptions, StlLoadOptions, StlSaveOptions, GltfLoadOptions, GltfSaveOptions, FbxLoadOptions) apabila anda memerlukan kawalan terperinci ke atas proses import atau eksport.
Untuk maklumat lanjut, lawati Aspose.3D dokumentasi atau layari sumber di GitHub.