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.

FormatPerpanjanganImportEksportSokongan bahanPersembahan hierarki
OBJ.objYa yaYa yafail utama (MTL file)Lapisan
STL.stlYa yaYa yaTiadaLapisan
Perbezaan GTTF 2.0.gltfYa yaYa yaPBRpenuh
GLB.glbYa yaYa yaPBRpenuh
FBX.fbxYa yaTidakkayapenuh

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

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

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.

DaripadakepadaGeometriBahan-bahanhierarkiNota
OBJSTLdisimpanKehilanganN/ASTL tidak mempunyai sokongan material
OBJPerbezaan antara GLTF dan GLBdisimpanBerubah kepada PBRLapisanBahan-bahan MTL dipaparkan di mana mungkin
STLOBJdisimpanTiadaN/ATiada bahan dalam sumber
STLPerbezaan antara GLTF dan GLBdisimpanPerkataan defaultLapisanBahan yang digunakan secara lalai
GTTFOBJdisimpanSederhanaPercumaPBR kepada bahan asas
GTTFSTLdisimpanKehilanganPercumaGeometri sahaja
FBXOBJdisimpanSederhanaPercumaPembersihan bahan
FBXSTLdisimpanKehilanganPercumaGeometri sahaja
FBXPerbezaan antara GLTF dan GLBdisimpanBerubah kepada PBRdisimpanKebaikan 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. GltfSaveOptions dengan setContentType(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.