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.

FormatSambunganImportEksportSokongan BahanHierarki Adegan
OBJ.objYaYaAsas (fail MTL)Rata
STL.stlYaYaTiadaRata
glTF 2.0.gltfYaYaPBRPenuh
GLB.glbYaYaPBRPenuh
FBX.fbxYaTidakKayaPenuh

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

KaedahTujuan
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);

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.

DariKeGeometriBahanHierarkiNota
OBJSTLTerpeliharaHilangN/ASTL tidak mempunyai sokongan bahan
OBJglTF/GLBDipertahankanDitukar kepada PBRRataBahan MTL dipetakan bila boleh
STLOBJDipertahankanTiadaN/ATiada bahan dalam sumber
STLglTF/GLBDipertahankanLalaiRataBahan lalai diterapkan
glTFOBJDipertahankanDipermudahDiratakanPBR ke bahan asas
glTFSTLDipertahankanHilangDiratakanGeometri sahaja
FBXOBJDipertahankanDisederhanakanDiratakanPenyederhanaan bahan
FBXSTLDipertahankanHilangDiratakanHanya geometri
FBXglTF/GLBDipertahankanDitukar kepada PBRDipertahankanKesetiaan 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 GltfSaveOptions dengan setContentType(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.