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:

AreaKelasTujuan
Grafik AdeganScene, Node, Entity, Mesh, CameraRepresentasi model hierarkis
FormatOpsi Muat/Simpan untuk OBJ, STL, glTF/GLB; Muat untuk FBXI/O yang tidak tergantung format
MaterialPbrMaterialPenampilan permukaan (PBR)
TransformasiTransform, GlobalTransformPosisi spasial
MatematikaVector3, Matrix4, Quaternion, BoundingBox3D 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.