Di posting pengantar, kami membahas apa Aspose.3D FOSS untuk Java itu dan bagaimana memulainya. Posting ini menyelami lebih dalam fitur utama yang membentuk perpustakaan, dengan contoh kode untuk setiap area.
Semua contoh mengasumsikan impor berikut:
import com.aspose.threed.*;
Dan dependensi Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
API Grafik Adegan
Grafik adegan adalah fondasi Aspose.3D FOSS untuk Java. Setiap model 3D – baik yang dimuat dari file maupun yang dibangun secara programatik – direpresentasikan sebagai pohon node yang berakar pada sebuah Scene objek.
Scene
Kelas Scene class adalah titik masuk untuk semua operasi. Anda dapat membuat adegan kosong atau memuat satu dari file:
// Empty scene
Scene scene = new Scene();
// Load from file
Scene loaded = Scene.fromFile("model.obj");
// Load with explicit options
Scene fromStl = Scene.fromFile("part.stl", new StlLoadOptions());
Akar pohon node diakses melalui getRootNode().
Node
Sebuah Node mewakili posisi bernama dalam pohon adegan. Node dapat memiliki anak, membentuk hierarki. Setiap node membawa sebuah lokal Transform dan sebuah yang dihitung GlobalTransform.
Scene scene = new Scene();
// Create a child node under the root
Node box = scene.getRootNode().createChildNode("Box");
// Create a nested hierarchy
Node arm = scene.getRootNode().createChildNode("Arm");
Node hand = arm.createChildNode("Hand");
Node finger = hand.createChildNode("Finger");
Anda juga dapat membuat node secara terpisah dan melampirkannya nanti:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entity dan Mesh
Sebuah Entity adalah kelas dasar abstrak untuk apa pun yang dapat dilampirkan ke sebuah node – geometri, kamera, dan lampu. Jenis entitas yang paling umum adalah Mesh, yang menyimpan geometri poligonal (vertices, faces, and normals).
Scene scene = Scene.fromFile("cube.obj");
// Traverse nodes and inspect entities
for (Node child : scene.getRootNode().getChildNodes()) {
Entity entity = child.getEntity();
if (entity instanceof Mesh) {
Mesh mesh = (Mesh) entity;
System.out.println("Node: " + child.getName());
System.out.println(" Vertices: " + mesh.getControlPoints().size());
}
}
Camera
Kamera adalah entitas yang dilampirkan ke node:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Definisi kamera dipertahankan saat mengekspor ke format yang mendukungnya (seperti glTF).
Catatan: Kelas Light tidak tersedia dalam edisi Java. Data pencahayaan adegan dari file yang diimpor disimpan sebagai generic Entity objek.
Muat dan Simpan Tanpa Memperhatikan Format
Salah satu keunggulan perpustakaan ini adalah bahwa grafik adegan tidak bergantung pada format. Anda dapat memuat dari format apa pun yang didukung, memanipulasi adegan melalui satu API, dan menyimpan ke format apa pun yang didukung.
// Load OBJ, save as glTF
Scene scene = Scene.fromFile("input.obj");
scene.save("output.gltf");
// Load FBX, save as STL (FBX is import only)
Scene scene2 = Scene.fromFile("character.fbx");
scene2.save("character.stl");
// Load STL, save as GLB
Scene scene3 = Scene.fromFile("part.stl", new StlLoadOptions());
GltfSaveOptions opts = new GltfSaveOptions();
opts.setContentType(FileContentType.BINARY);
scene3.save("part.glb", opts);
Format ditentukan oleh ekstensi file. Anda juga dapat memberikan opsi penyimpanan eksplisit untuk mengontrol output:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Material
Aspose.3D FOSS untuk Java menyediakan model material PBR (Physically Based Rendering) melalui PbrMaterial. Ini satu-satunya kelas material konkret dalam edisi Java.
PbrMaterial
Material rendering berbasis fisika yang menggunakan parameter albedo, metalness, dan roughness. Ini adalah model material standar untuk glTF dan mesin real-time modern.
PbrMaterial pbr = new PbrMaterial();
pbr.setAlbedo(new Vector4(0.8, 0.2, 0.2, 1.0)); // Red-ish base color
pbr.setMetallicFactor(0.0); // Non-metallic
pbr.setRoughnessFactor(0.5); // Medium roughness
Pelestarian material antar format tergantung pada kemampuan format target. Material PBR secara alami dipetakan ke output glTF dan GLB.
Transformasi dan Spasial
Setiap Node di dalam grafik adegan memiliki sebuah Transform yang mendefinisikan posisi, rotasi, dan skala relatif terhadap induknya.
Transformasi Lokal
Scene scene = new Scene();
Node node = scene.getRootNode().createChildNode("TestNode");
Transform t = node.getTransform();
t.setTranslation(1, 2, 3); // Position
t.setScale(2, 2, 2); // Uniform scale
t.setEulerAngles(0, 45, 0); // Euler rotation in degrees
Transformasi Global
The GlobalTransform adalah transformasi world-space yang dihitung, dengan memperhitungkan seluruh rantai induk. Ini bersifat read-only dan memperbarui secara otomatis.
Node parent = scene.getRootNode().createChildNode("Parent");
parent.getTransform().setTranslation(10, 0, 0);
Node child = parent.createChildNode("Child");
child.getTransform().setTranslation(5, 0, 0);
// Child's global position is (15, 0, 0)
GlobalTransform global = child.getGlobalTransform();
Pewarisan transformasi induk-anak ini mengikuti pola grafik adegan standar yang digunakan oleh mesin 3D dan alat DCC.
Utilitas Matematika
Pustaka ini mencakup tipe matematika inti untuk operasi 3D.
Vector3
Vektor tiga komponen yang digunakan untuk posisi, arah, normal, dan warna.
Vector3 a = new Vector3(1, 0, 0);
Vector3 b = new Vector3(0, 1, 0);
// Addition
Vector3 sum = Vector3.add(a, b); // (1, 1, 0)
Matrix4
Matriks transformasi 4x4 untuk menggabungkan translasi, rotasi, dan skala menjadi satu operasi.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
Representasi rotasi yang menghindari gimbal lock dan melakukan interpolasi secara halus. Quaternion digunakan secara internal oleh sistem transformasi.
BoundingBox
BoundingBox yang sejajar sumbu untuk kueri spasial, pemeriksaan tabrakan, dan analisis adegan.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
Keterbatasan yang Diketahui
Perlu dicatat bahwa Scene.render() adalah tidak didukung di edisi FOSS. Memanggilnya akan melempar sebuah UnsupportedOperationException. Perpustakaan ini dirancang untuk pemrosesan 3D berbasis file – memuat, mengubah, dan menyimpan – bukan untuk rendering waktu nyata.
Ringkasan
Fitur utama Aspose.3D FOSS untuk Java terbagi menjadi lima area:
| Area | Kelas | Tujuan |
|---|---|---|
| Grafik Adegan | Scene, Node, Entity, Mesh, Camera | Representasi model hierarkis |
| Format | Opsi Muat/Simpan untuk OBJ, STL, glTF/GLB; Muat untuk FBX | I/O yang tidak tergantung format |
| Material | PbrMaterial | Penampilan permukaan (PBR) |
| Transformasi | Transform, GlobalTransform | Posisi spasial |
| Matematika | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
Pada posting berikutnya, kami akan membahas tutorial praktis format demi format yang mencakup OBJ, STL, glTF, dan FBX dengan opsi muat dan simpan yang terperinci.