Kami teruja untuk mengumumkan ketersediaan Aspose.3D FOSS for Java – sebuah perpustakaan percuma, sumber terbuka untuk bekerja dengan format fail 3D dalam aplikasi Java. Dibina sebagai penyelesaian Java tulen tanpa kebergantungan asli, perpustakaan ini berjalan pada Java 21 dan ke atas, menjadikannya dapat diakses oleh pelbagai projek dan persekitaran.

Pos ini mengupas apa yang ditawarkan oleh perpustakaan, cara memulakan, dan ke mana untuk pergi seterusnya.

Apakah Aspose.3D FOSS untuk Java?

Aspose.3D FOSS for Java ialah perpustakaan pemprosesan fail 3D yang ringan yang diterbitkan di bawah MIT license. Ia menyediakan API graf-seni yang membolehkan anda memuat naik, memeriksa, menukar, dan menyimpan model 3D merentasi beberapa format yang banyak digunakan. Perpustakaan ini ditulis sepenuhnya dalam Java dan tidak memerlukan binari asli luaran atau konfigurasi khusus platform.

Kod sumber tersedia di GitHub: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Sorotan Utama

  • Murni Java – tiada JNI, tiada perpustakaan asli, tiada sekatan platform.
  • Java 21+ serasi.
  • dilisensikan MIT – gunakannya dalam projek peribadi, komersial, atau proprietari tanpa sekatan.
  • Senibina graf-skena – pokok yang biasa bagi nod, mesh, kamera, dan bahan.
  • Sokongan berbilang format – baca dan tulis fail OBJ, STL, glTF 2.0, dan GLB; baca fail FBX.

Mula Cepat

Pemasangan Maven

Tambah kebergantungan berikut ke dalam projek anda pom.xml:

<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-3d-foss</artifactId>
    <version>26.1.0</version>
</dependency>

Penukaran Pertama Anda

Kes penggunaan paling mudah ialah memuatkan fail 3D dalam satu format dan menyimpannya dalam format lain. Berikut ialah penukaran 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");
    }
}

The Scene kelas adalah titik masuk utama. Panggil Scene.fromFile() dengan laluan fail untuk memuatkan model, kemudian panggil save() dengan laluan sasaran. Perpustakaan mengenal pasti format daripada sambungan fail.

Membina Scene dari Awal

Anda juga boleh membina scene secara programatik:

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 mencipta scene baru, menambah nod anak bernama “Box” di bawah root, meletakkannya pada koordinat (1, 2, 3), dan mengeksport hasilnya sebagai fail glTF.

Memuat dengan Pilihan Khusus Format

Apabila anda memerlukan kawalan yang lebih halus ke atas proses pemuatan, setiap format menyediakan kelas pilihan khusus. Sebagai contoh, memuatkan fail 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");
    }
}

The Scene.fromFile() kaedah statik menerima mana-mana jenis pilihan muat: ObjLoadOptions, StlLoadOptions, GltfLoadOptions, atau FbxLoadOptions.

Menerokong Graf Adegan

Setelah adegan dimuatkan, anda boleh melangkah melalui pokok nod untuk memeriksa atau mengubah kandungannya:

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());
            }
        }
    }
}

Corak ini berguna untuk penyahpepijatan, menjana laporan mengenai kandungan model, atau mengubah bahagian adegan secara terpilih sebelum dieksport semula.

Menerapkan Transformasi

Penempatan nod 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 pewarisan ibu bapa‑anak yang standard: kedudukan ruang‑dunia anak merupakan gabungan transformasi setempatnya dan semua transformasi nenek moyang sehingga ke akar.

Apa yang Disertakan

Pustaka ini disertakan dengan set keupayaan terfokus yang direka berdasarkan model graf adegan 3D.

Graf Adegan

Graf adegan adalah tulang belakang API. Setiap fail 3D diwakili sebagai struktur pokok:

KelasPeranan
SceneBekas peringkat atas; akar graf adegan
NodeKedudukan bernama dalam pokok; menyimpan transformasi dan nod anak
EntityAsas abstrak untuk objek visual yang dilampirkan pada nod
MeshGeometri poligon – titik sudut, muka, normal
CameraDefinisi kamera maya
TransformTerjemahan, putaran, dan skala setempat untuk sebuah nod
GlobalTransformTransform ruang-dunia yang dikira

Bahan

Pustaka ini menyediakan model bahan PBR (Physically Based Rendering):

  • PbrMaterial – bahan rendering berasaskan fizikal dengan albedo, metalness, roughness, warna emissif, dan ketelusan. Ini adalah satu-satunya kelas bahan konkrit yang tersedia dalam edisi Java.

Utiliti Matematik

The com.aspose.threed pakej termasuk primitif matematik penting:

  • Vector3 – vektor 3-komponen untuk kedudukan, arah, dan warna.
  • Matrix4 – matriks transformasi 4x4.
  • Quaternion – representasi putaran.
  • BoundingBox – kotak sempadan selari paksi 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)

Pilihan Muat dan Simpan

Setiap format mempunyai kelas pilihan khusus yang membolehkan anda mengawal tingkah laku import dan eksport:

FormatMuat PilihanSimpan Pilihan
OBJObjLoadOptionsObjSaveOptions
STLStlLoadOptionsStlSaveOptions
glTF / GLBGltfLoadOptionsGltfSaveOptions
FBXFbxLoadOptions– (import sahaja)

Sebagai contoh, untuk mengeksport glTF dengan JSON yang diformat cantik dan sistem koordinat terbalik:

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

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

Format yang Disokong

Jadual berikut merangkum format yang Aspose.3D FOSS untuk Java boleh baca dan tulis.

FormatSambunganImportEksportNota
OBJ.objYaYaDengan bahan MTL
STL.stlYaYaBinari + ASCII
glTF 2.0.gltfYaYaformat JSON
GLB.glbYaYaglTF binari melalui GltfSaveOptions
FBX.fbxYaTidakImport sahaja

OBJ, STL, glTF, dan GLB menyokong kedua-dua pemuatan dan penyimpanan. FBX disokong untuk import sahaja.

Panduan Pemilihan Format

Memilih format yang tepat bergantung pada kes penggunaan anda:

  • OBJ adalah ideal apabila anda memerlukan keserasian maksimum merentasi alat 3D. Hampir setiap aplikasi pemodelan boleh membaca dan menulis OBJ. Ia berfungsi dengan baik untuk pertukaran data mesh tetapi hanya membawa maklumat bahan asas melalui fail MTL yang sepadan.
  • STL adalah format pilihan untuk aliran kerja pencetakan 3D. Ia menyimpan geometri segitiga mentah tanpa bahan atau hierarki adegan, yang tepat apa yang dijangka oleh perisian pemotong. Jika aliran kerja anda berakhir pada pencetak 3D, STL adalah pilihan yang jelas.
  • glTF adalah standard moden untuk web dan 3D masa nyata. Ia menyokong bahan PBR, hierarki adegan penuh, dan direka untuk penghantaran yang cekap. Gunakan glTF apabila membina penonton berasaskan web, bekerja dengan three.js atau Babylon.js, atau menyasarkan mana-mana paip rendering masa nyata.
  • FBX diintegrasikan secara mendalam ke dalam aliran kerja pembangunan permainan dan penciptaan kandungan digital. Ia menyokong data adegan yang kaya termasuk hierarki dan bahan. Aspose.3D FOSS untuk Java menyokong FBX import sahaja – gunakan ia untuk memuatkan aset FBX dan menukarkannya ke format lain.

Keterbatasan Dikenali

Adalah penting untuk diperhatikan bahawa Scene.render() adalah tidak disokong dalam edisi FOSS. Memanggil kaedah ini akan melemparkan satu UnsupportedOperationException. Perpustakaan ini direka untuk pemprosesan 3D berasaskan fail – memuatkan, memanipulasi, menukar, dan menyimpan model – bukannya rendering masa nyata ke paparan.

Sumber Terbuka dan Pelesenan

Aspose.3D FOSS untuk Java dikeluarkan di bawah MIT License. Ini bermakna anda bebas untuk:

  • Gunakan perpustakaan ini dalam aplikasi komersial dan proprietari.
  • Ubah suai kod sumber mengikut keperluan anda.
  • Edarkan perpustakaan sebagai sebahagian daripada perisian anda.

Tiada yuran royalti, tiada had penggunaan, dan tiada keperluan atribusi selain apa yang ditetapkan oleh lesen MIT.

Kod sumber penuh dihoskan di GitHub, dan sumbangan dialu‑alukan: https://github.com/aspose-3d-foss/Aspose.3D-FOSS-for-Java

Keperluan Sistem

KeperluanButiran
Java versi21 or later
KebergantunganTiada (murni Java)
PlatformSebarang platform yang menjalankan JVM
Alat binaMaven (disarankan)

Mula Menggunakan

Berikut ialah sumber-sumber untuk membantu anda memulakan dan menjalankan:

  • Dokumentasi – panduan komprehensif dan tutorial API tersedia di Aspose.3D laman dokumentasi.
  • Pangkalan Pengetahuan – artikel cara-cara praktikal dan tip penyelesaian masalah dalam Aspose.3D KB.
  • Rujukan API – rujukan kelas dan kaedah terperinci pada Aspose.3D Rujukan API.
  • Kod Sumber – layari dan sumbangkan di GitHub.
  • Maven Central – pakej ini diterbitkan sebagai com.aspose:aspose-3d-foss di Maven Central.

Kes Penggunaan Biasa

Berikut adalah beberapa senario praktikal di mana Aspose.3D FOSS untuk Java sesuai:

Saluran Penukaran Format

Banyak pasukan menerima aset 3D dalam satu format tetapi memerlukannya dalam format lain. Pasukan reka bentuk mungkin bekerja dalam FBX manakala pasukan web memerlukan glTF. Perpustakaan ini membolehkan anda membina saluran penukaran automatik:

// 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 mengesahkan kandungannya – memeriksa bilangan nod, mengesahkan geometri, atau mengesahkan bahawa elemen yang dijangka ada:

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");
    }
}

Penyusunan Adegan

Anda boleh memuatkan pelbagai 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 Seterusnya

Dalam kiriman akan datang, kami akan membincangkan:

  • Penjelajahan mendalam mengenai ciri utama API grafik-adegan, bahan, dan utiliti matematik.
  • Panduan praktikal untuk bekerja dengan setiap format 3D yang disokong – OBJ, STL, glTF, dan FBX – termasuk pilihan muat naik/simpan dan corak penukaran pukal.

Terus ikuti, dan jangan ragu untuk meneroka perpustakaan serta berkongsi maklum balas anda di GitHub.