Dalam pos pengenalan, kami membincangkan apa Aspose.3D FOSS untuk Java itu dan bagaimana untuk memulakan. Pos ini menyelami lebih dalam ciri utama yang membentuk perpustakaan, dengan contoh kod untuk setiap bahagian.
Semua contoh mengandaikan import berikut:
import com.aspose.threed.*;
Dan kebergantungan Maven:
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-3d-foss</artifactId>
<version>26.1.0</version>
</dependency>
API Graf Adegan
Graf adegan adalah asas Aspose.3D FOSS untuk Java. Setiap model 3D – sama ada dimuatkan dari fail atau dibina secara programatik – diwakili sebagai pokok nod yang berakar pada Scene objek.
Scene
Kelas Scene kelas adalah titik masuk untuk semua operasi. Anda boleh mencipta adegan kosong atau memuat satu daripada fail:
// 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 pokok nod diakses melalui getRootNode().
Node
A Node mewakili kedudukan bernama dalam pokok adegan. Node boleh mempunyai anak, membentuk hierarki. Setiap node membawa satu lokal Transform dan satu yang dikira 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 boleh membina nod secara bebas dan melekapkannya kemudian:
Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);
Entiti dan Mesh
Sebuah Entity adalah kelas asas abstrak untuk apa jua yang boleh dilampirkan kepada nod – geometri, kamera, dan lampu. Jenis entiti yang paling biasa ialah Mesh, yang menyimpan geometri poligon (titik, muka, dan normal).
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());
}
}
Kamera
Kamera ialah entiti yang dilampirkan kepada nod:
Scene scene = new Scene();
Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node
Definisi kamera dipelihara semasa mengeksport ke format yang menyokongnya (seperti glTF).
Nota: Kelas Light tidak tersedia dalam edisi Java. Data pencahayaan adegan daripada fail yang diimport disimpan sebagai generik Entity objek.
Muat dan Simpan Bebas Format
Salah satu kelebihan perpustakaan ialah graf adegan tidak bergantung pada format. Anda memuat dari mana-mana format yang disokong, memanipulasi adegan melalui satu API, dan menyimpan ke mana-mana format yang disokong.
// 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 sambungan fail. Anda juga boleh menghantar pilihan simpan eksplisit untuk mengawal output:
GltfSaveOptions opts = new GltfSaveOptions();
opts.setFlipCoordinateSystem(true);
opts.setPrettyPrint(true);
scene.save("output.gltf", opts);
Bahan
Aspose.3D FOSS untuk Java menyediakan model bahan PBR (Physically Based Rendering) melalui PbrMaterial. Ini adalah satu-satunya kelas bahan konkrit dalam edisi Java.
PbrMaterial
Bahan rendering berasaskan fizikal yang menggunakan parameter albedo, metalness, dan roughness. Ini adalah model bahan standard untuk glTF dan enjin masa nyata moden.
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
Pemeliharaan bahan merentasi format bergantung pada keupayaan format sasaran. Bahan PBR dipetakan secara semula jadi ke output glTF dan GLB.
Transform dan Spatial
Setiap Node dalam graf adegan mempunyai Transform yang menentukan kedudukan, putaran, dan skala relatif kepada induknya.
Transform Tempatan
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 ialah transformasi ruang-dunia yang dikira, mengambil keseluruhan rantaian induk ke dalam kiraan. Ini hanya-baca dan dikemas kini secara automatik.
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 ibu bapa‑anak ini mengikuti corak graf‑skena standard yang digunakan oleh enjin 3D dan alat DCC.
Utiliti Matematik
Pustaka ini termasuk jenis‑jenis matematik teras untuk operasi 3D.
Vector3
Vektor tiga komponen yang digunakan untuk kedudukan, 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 penterjemahan, putaran, dan skala menjadi satu operasi tunggal.
Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform
Quaternion
Representasi putaran yang mengelakkan gimbal lock dan menyelaras dengan lancar. Quaternion digunakan secara dalaman oleh sistem transformasi.
BoundingBox
Satu BoundingBox yang selari paksi untuk pertanyaan ruang, pemeriksaan perlanggaran, dan analisis adegan.
BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry
Keterbatasan Dikenali
Perlu diingat bahawa Scene.render() ialah tidak disokong dalam edisi FOSS. Memanggilnya akan menimbulkan satu UnsupportedOperationException. Perpustakaan ini direka untuk pemprosesan 3D berasaskan fail – memuatkan, menukar, dan menyimpan – bukannya rendering masa nyata.
Ringkasan
Ciri utama Aspose.3D FOSS untuk Java dibahagikan kepada lima bidang:
| Kawasan | Kelas | Tujuan |
|---|---|---|
| Graf Adegan | Scene, Node, Entity, Mesh, Camera | Perwakilan model hierarki |
| Format | Pilihan Muat/Simpan untuk OBJ, STL, glTF/GLB; Muat untuk FBX | I/O bebas format |
| Bahan | PbrMaterial | Penampilan permukaan (PBR) |
| Transformasi | Transform, GlobalTransform | Penempatan spasial |
| Matematik | Vector3, Matrix4, Quaternion, BoundingBox | 3D math primitives |
Dalam kiriman seterusnya, kami akan membimbing anda melalui tutorial praktikal mengikut format yang meliputi OBJ, STL, glTF, dan FBX dengan pilihan muat naik dan simpan yang terperinci.