Kami senang untuk mengumumkan ketersediaan 3D FOSS untuk Java - perpustakaan gratis, sumber terbuka untuk bekerja dengan format file 3D dalam aplikasi Java. dibangun sebagai solusi Java murni tanpa ketergantungan asli, perpuskannya berjalan di Java 21 dan kemudian, menjadikannya terjangkau kepada berbagai proyek dan lingkungan.

Posting ini berjalan melalui apa yang ditawarkan perpustakaan, bagaimana untuk memulai, dan di mana untuk pergi dari sini.

Apa saja yang dimaksud dengan 3D FOSS untuk Java?

Aspose.3D FOSS untuk Java adalah perpustakaan pemrosesan file 3D ringan yang diterbitkan di bawah Lisensi MID.Ini menyediakan API grafis adegan yang memungkinkan Anda mengunggah, memeriksa, mengubah dan menyimpan model 3D di berbagai format yang banyak digunakan. perpustakaan ini ditulis sepenuhnya dalam Java dan tidak memerlukan binari asli eksternal atau konfigurasi khusus platform.

Kode sumbernya tersedia di GitHub: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java untuk

Titik Kunci

  • Jasa Bersih - Tidak ada JNI, tidak ada perpustakaan asli, tak ada pembatasan platform.
  • Jasa 21+ yang kompatibel.
  • Lisensi MID - Menggunakannya dalam proyek pribadi, komersial atau properti tanpa batasan.
  • Arsitektur Scene-Graph - pohon yang dikenal dari nodus, mesh, kamera dan bahan.
  • Multi-format dukungan - membaca dan menulis OBJ, STL, glTF 2.0, dan file GLB; baca FBX file.

cepat memulai

Maven instalasi

Tambahkan ketergantungan berikut ke Anda pom.xml:

<dependency>
  <groupId>org.aspose</groupId>
  <artifactId>aspose-3d-foss</artifactId>
  <version>26.5.0</version>
</dependency>

Konversi pertama Anda

Contoh yang paling sederhana adalah mengunggah file 3D dalam satu format dan menyimpannya dalam format lain. berikut adalah konversi dua baris dari OBJ ke STL:

import com.aspose.threed.*;

public class QuickConvert {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("cube.obj");
        scene.save("output.stl");
    }
}

yang Scene Kelas adalah titik masuk pusat. panggilan Scene.fromFile() dengan jalur file untuk mengisi model, kemudian hubungi save() dengan jalur sasaran. perpustakaan menginfeksi format dari file extension.

Membuat sebuah adegan dari Scratch

Anda juga dapat membuat adegan secara programmatik:

import com.aspose.threed.*;

public class BuildScene {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();
        Node node = scene.getRootNode().createChildNode("Box");

        Transform t = node.getTransform();
        t.setTranslation(1, 2, 3);

        scene.save("scene.gltf");
    }
}

Ini menciptakan adegan baru, menambahkan nod anak yang disebut “Box” di bawah akar, menempatkan pada koordinat (1, 2, 3), dan mengekspor hasilnya sebagai file glTF.

Mengisi dengan Format-Specific Options

Ketika Anda membutuhkan kontrol yang lebih baik atas proses muat, setiap format menyediakan kelas opsi khusus. misalnya, muatan file STL dengan pilihan eksplisit:

import com.aspose.threed.*;

public class LoadWithOptions {
    public static void main(String[] args) throws Exception {
        StlLoadOptions opts = new StlLoadOptions();
        Scene scene = Scene.fromFile("part.stl", opts);

        // Inspect the loaded scene
        System.out.println("Root children: "
            + scene.getRootNode().getChildNodes().size());

        // Re-export as OBJ
        scene.save("part.obj");
    }
}

yang Scene.fromFile() Metode statik menerima salah satu jenis opsi beban: ObjLoadOptions, StlLoadOptions, GltfLoadOptions,atau FbxLoadOptions.

Melintasi Scene Graph

Setelah adegan diisi, Anda dapat berjalan melalui pohon nod untuk memeriksa atau mengubah kontennya:

import com.aspose.threed.*;

public class TraverseScene {
    public static void main(String[] args) throws Exception {
        Scene scene = Scene.fromFile("model.gltf");

        for (Node child : scene.getRootNode().getChildNodes()) {
            System.out.println("Node: " + child.getName());

            Transform t = child.getTransform();
            System.out.println("  Translation: " + t.getTranslation());

            Entity entity = child.getEntity();
            if (entity instanceof Mesh) {
                Mesh mesh = (Mesh) entity;
                System.out.println("  Vertices: "
                    + mesh.getControlPoints().size());
            }
        }
    }
}

Pola ini berguna untuk debugging, menghasilkan laporan tentang konten model, atau selektiv mengubah bagian dari adegan sebelum mengekspor kembali.

Menggunakan Transformasi

Posisi nodus dalam ruang 3D dilakukan melalui Transform Objek pada setiap Node:

import com.aspose.threed.*;

public class TransformExample {
    public static void main(String[] args) throws Exception {
        Scene scene = new Scene();

        Node parent = scene.getRootNode().createChildNode("Parent");
        parent.getTransform().setTranslation(10, 0, 0);

        Node child = parent.createChildNode("Child");
        child.getTransform().setTranslation(5, 0, 0);
        child.getTransform().setScale(2, 2, 2);

        // Child's world position is (15, 0, 0) due to
        // parent-child transform inheritance

        scene.save("transformed.gltf");
    }
}

Transformasi mengikuti model warisan ibu-anak standar: posisi ruang dunia anak adalah kombinasi transformasinya lokal dan semua nenek moyang berubah sampai akar.

Apa yang Termasuk

Perpustakaan kapal dengan set kapasitas yang berfokus dirancang di sekitar model 3D scene-graf.

Gambar Grafik

Graf adegan adalah latar belakang API. Setiap file 3D diwakili sebagai struktur pohon:

KelasPeranan
SceneKontainer tingkat atas; akar graf tempat kejadian
NodePosisi yang disebut di pohon; memegang transformasi dan nodus anak
EntityAbstrak basis untuk objek visual yang terikat pada nodus
MeshGeometri Poligonal - vertikal, wajah, normal
CameraDefinisi Kamera Virtual
TransformTerjemahan, rotasi dan skala untuk nod
GlobalTransformTransformasi ruang dunia komputer

Bahan

Perpustakaan menyediakan model material PBR (Rendering Berbasis Fisik):

  • PbrMaterial - materi rendering berbasis fisik dengan albedo, logam, kasar, warna emisi dan transparan. ini adalah satu-satunya kelas material konkrit yang tersedia dalam edisi Java.

Matematika Utilitas

yang com.aspose.threed Paket ini mencakup matematika primitif penting:

  • Vektor 3 - Vektor 3 komponen untuk posisi, arah dan warna.
  • Matriks 4 Matriks transformasi 4x4.
  • Kadar Kuaternya Perwakilan rotasi .
  • BoundingBox - kotak penghalang yang diselaraskan dengan sumbu untuk pertanyaan ruang.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
Vector3 c = Vector3.add(a, b); // (1, 1, 0)

Download dan Simpan Opsi

Setiap format memiliki kelas opsi khusus yang memungkinkan Anda mengontrol perilaku impor dan ekspor:

FormatnyaOpsi KargoSimpan Opsi
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
GTS / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions(hanya untuk impor)

Misalnya, untuk mengekspor glTF dengan JSON yang dicetak dan sistem koordinat berlapis:

GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);

scene.save("output.gltf", opts);

Format yang didukung

Jadual berikut meringkas format yang Aspose.3D FOSS untuk Java dapat membaca dan menulis.

FormatnyaPerpanjanganImportasiEksporNotis yang
OBJ.objYa yaYa yaDengan bahan MTL
STL.stlYa yaYa yaBinary + ASCII
GTS 2.0.gltfYa yaYa yaFormat JSON
GLB.glbYa yaYa yaBinary GlTF melalui GltfSaveOptions
FBX.fbxYa yaTidakHanya impor

OBJ, STL, glTF, dan GLB mendukung kedua pengisian dan simpanan. FBX didukung untuk impor saja.

Format Seleksi Panduan

Memilih format yang tepat tergantung pada kasus penggunaan Anda:

  • OBJ ideal ketika Anda membutuhkan kompatibilitas maksimal di seluruh alat 3D. Hampir setiap aplikasi pemodelan dapat membaca dan menulis OBJ. Ini bekerja dengan baik untuk pertukaran data mesh tetapi hanya membawa informasi material dasar melalui file MTL yang disertai.
  • STL adalah format pilihan untuk 3D pencetakan aliran kerja. ini menyimpan geometri triangulated mentah tanpa bahan atau hierarki adegan, yang tepat apa yang diharapkan oleh perangkat lunak slicer. Jika jalur Anda berakhir dengan printer 3d, STL adalah pilihan sederhana.
  • GTTF adalah standar modern untuk web dan real-time 3D. Ini mendukung bahan PBR, hierarki scene penuh, dan dirancang untuk transmisi yang efisien. Gunakan glTF ketika membangun penonton berbasis web, bekerja dengan three.js atau Babylon.JS, atau menargetkan pipeline rendering real time apa pun.
  • FBX sangat terintegrasi dalam pengembangan game dan aliran kerja penciptaan konten digital. mendukung data panggung yang kaya termasuk hierarki dan bahan. Aspose.3D FOSS untuk Java mendukung FBX Hanya impor - Gunakan untuk mengunggah aset FBX dan menukarkan mereka ke format lain.

Terbatas yang diketahui

Penting untuk diperhatikan bahwa Scene.render() adalah Tidak didukung Dalam edisi FOSS. memanggil metode ini akan melemparkan satu UnsupportedOperationException.Perpustakaan ini dirancang untuk pemrosesan 3D berbasis file - memuat, memanipulasi, mengubah dan menghemat model - bukannya rendering real-time ke layar.

Open Source dan Lisensi

Aspose.3D FOSS untuk Java dikeluarkan di bawah Lisensi MID.Ini berarti Anda bebas untuk:

  • Gunakan perpustakaan dalam aplikasi komersial dan properti.
  • Mengubah kode sumber untuk memenuhi kebutuhan Anda.
  • Membagikan perpustakaan sebagai bagian dari perangkat lunak Anda sendiri.

Tidak ada biaya royalty, tidak ada batasan penggunaan, dan tidak adanya persyaratan penghargaan di luar apa yang ditetapkan oleh lisensi MIT.

Kode sumber penuh di hosting di GitHub, dan kontribusi disambut baik: HTTPS://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java untuk

Sistem Keperluan

KebutuhanDetailnya
Versi Java21 or later
ketergantunganTidak ada (Java Bersih)
Platform yangPlatform yang menjalankan JVM
Membangun AlatMaven (dengan rekomendasi)

Bermula dengan

Berikut ini adalah sumber daya untuk membantu Anda naik dan berlari:

  • Dokumentasi - panduan komprehensif dan jalur API tersedia di Aspose.3D Dokumentasi Situs Web.
  • Basis pengetahuan - cara-cara praktis untuk artikel dan tips penyelesaian masalah dalam Keterangan 3D KB.
  • Referensi API - referensi kelas dan metode terperinci pada Aspose.3D API Referensi.
  • Kode Sumber - melayari dan berkontribusi pada GitHub.
  • Maven Pusat - paket ini diterbitkan sebagai org.aspose:aspose-3d-foss:26.5.0 di pusat kota Maven.

Kasus Penggunaan Umum

Berikut adalah beberapa skenario praktis di mana Aspose.3D FOSS untuk Java cocok dengan baik:

Format Konversi Pipeline

Banyak tim menerima aset 3D dalam satu format tetapi membutuhkan mereka dalam yang lain.Tim desain mungkin bekerja di FBX sementara tim web memerlukan glTF.Liblioteka memungkinkan Anda untuk membangun pipa konversi otomatis:

// Convert all incoming FBX assets to GLB for the web team
Scene scene = Scene.fromFile("asset.fbx");

GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);

scene.save("asset.glb", opts);

3D Model Inspection and Validation

Sebelum mengintegrasikan aset 3D ke dalam aplikasi Anda, Anda mungkin ingin validasi kontennya - memeriksa angka nod, memverifikasi geometri, atau mengkonfirmasi bahwa elemen yang diharapkan hadir:

Scene scene = Scene.fromFile("model.obj");

int nodeCount = scene.getRootNode().getChildNodes().size();
System.out.println("Top-level nodes: " + nodeCount);

for (Node child : scene.getRootNode().getChildNodes()) {
    if (child.getEntity() instanceof Mesh) {
        Mesh mesh = (Mesh) child.getEntity();
        System.out.println(child.getName() + ": "
            + mesh.getControlPoints().size() + " vertices");
    }
}

Adegan pertemuan

Anda dapat mengisi beberapa model dan menggabungkannya ke dalam satu adegan:

Scene scene = new Scene();

Scene part1 = Scene.fromFile("chassis.obj");
Scene part2 = Scene.fromFile("wheels.obj");

// Add nodes from each part into the combined scene
for (Node child : part1.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}
for (Node child : part2.getRootNode().getChildNodes()) {
    scene.getRootNode().getChildNodes().add(child);
}

scene.save("assembled.gltf");

Apa yang berikutnya

Dalam posting selanjutnya, kami akan membahas:

  • Sebuah menyelam dalam fitur-fitur kunci dari API skenario grafis, bahan, dan utilitas matematika.
  • Panduan praktis untuk bekerja dengan setiap format 3D yang didukung - OBJ, STL, glTF, dan FBX - termasuk opsi beban / simpanan dan pola konversi batch.

Tetap tertutup, dan merasa bebas untuk menjelajahi perpustakaan dan berbagi maklum balas Anda di GitHub.