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.

FormatnyaPerpanjanganImportasiEksporDukungan materialSisi hierarki
OBJ.objYa yaYa yaFile dasar (MTL file)Lantai
STL.stlYa yaYa yaTidak adaLantai
GTS 2.0.gltfYa yaYa yaPBRpenuh
GLB.glbYa yaYa yaPBRpenuh
FBX.fbxYa yaTidakkayapenuh

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

MetodeTujuan
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.

DariUntukGeometriBahanhierarkiNotis yang
OBJSTLdisimpanKehilanganN/ASTL tidak memiliki dukungan material.
OBJGTS / GLBdisimpanTerjemahan untuk PBRLantaiMRT yang dipaparkan di mana mungkin
STLOBJdisimpanTidak adaN/ATidak ada bahan dalam sumber
STLGTS / GLBdisimpandefaultLantaiBahan yang digunakan secara default
GTTFOBJdisimpanSederhanaFlattenedPBR untuk bahan dasar
GTTFSTLdisimpanKehilanganFlattenedGeometri hanya
FBXOBJdisimpanSederhanaFlattenedMateri yang Sederhana
FBXSTLdisimpanKehilanganFlattenedGeometri hanya
FBXGTS / GLBdisimpanTerjemahan untuk PBRdisimpanFidelitas 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. GltfSaveOptions Dengan setContentType(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.