İçinde giriş gönderisi, Aspose.3D FOSS for Java nedir ve nasıl başlanır konusunu ele aldık. Bu gönderi, kütüphaneyi oluşturan temel özelliklere daha derinlemesine bakıyor ve her alan için kod örnekleri sunuyor.

All examples assume the following import:

import com.aspose.threed.*;

And the Maven dependency:

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

Scene Graph API

Sahne grafiği, Aspose.3D FOSS for Java temelini oluşturur. Her 3D model – dosyadan yüklenmiş olsun ya da programlı olarak oluşturulmuş olsun – bir kök düğümüne sahip bir düğüm ağacı olarak temsil edilir bir Scene nesne.

Scene

The Scene class, tüm işlemler için giriş noktasıdır. Boş bir sahne oluşturabilir veya bir dosyadan yükleyebilirsiniz:

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

Düğüm ağacının kökü şu şekilde erişilir getRootNode().

Node

A Node sahne ağacında adlandırılmış bir konumu temsil eder. Düğümler çocuklara sahip olabilir ve bir hiyerarşi oluşturur. Her düğüm yerel bir Transform ve hesaplanmış bir 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");

You can also construct nodes independently and attach them later:

Node standalone = new Node("Standalone");
scene.getRootNode().getChildNodes().add(standalone);

Entity and Mesh

Bir Entity bir düğüme eklenebilen her şey için soyut bir temel sınıftır – geometri, kameralar ve ışıklar. En yaygın varlık türü Mesh, çokgen geometri (köşeler, yüzeyler ve normaller) tutar.

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

Cameras are entities that attach to nodes:

Scene scene = new Scene();

Node cameraNode = scene.getRootNode().createChildNode("MainCamera");
// Camera entity can be assigned to the node

Kamera tanımları, bunları destekleyen formatlara (örneğin glTF) dışa aktarılırken korunur.

Not: The Light sınıf Java sürümünde mevcut değildir. İçeri aktarılan dosyalardan gelen sahne aydınlatma verileri genel olarak Entity nesneler.

Biçim Bağımsız Yükleme ve Kaydetme

Kütüphanenin güçlü yönlerinden biri, sahne grafiğinin format bağımsız olmasıdır. Herhangi bir desteklenen formattan yüklersiniz, sahneyi tek bir API üzerinden manipüle edersiniz ve herhangi bir desteklenen formata kaydedersiniz.

// 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);

Biçim, dosya uzantısına göre belirlenir. Çıktıyı kontrol etmek için ayrıca açık kaydetme seçenekleri de geçirebilirsiniz:

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

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

Materyaller

Aspose.3D FOSS for Java bir PBR (Physically Based Rendering) malzeme modelini aracılığıyla sağlar PbrMaterial. Bu, Java sürümündeki tek somut malzeme sınıfıdır.

PbrMaterial

Albedo, metalik ve pürüzlülük parametrelerini kullanan fiziksel tabanlı bir render materyali. Bu, glTF ve modern gerçek zamanlı motorlar için standart materyal modelidir.

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

Materyal korunumu, formatlar arasında hedef formatın yeteneklerine bağlıdır. PBR materyaller, glTF ve GLB çıktısına doğal olarak eşlenir.

Dönüşüm ve Uzamsal

Her Node sahne grafiğinde bir Transform konumunu, dönüşünü ve ölçeğini ebeveynine göre tanımlayan.

Yerel Dönüşüm

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

Genel Dönüşüm

Bu GlobalTransform hesaplanmış world-space dönüşümüdür, tüm ebeveyn zincirini dikkate alır. Bu sadece okunur ve otomatik olarak güncellenir.

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

Bu ebeveyn-çocuk dönüşüm kalıtımı, 3D motorları ve DCC araçları tarafından kullanılan standart sahne grafiği desenini izler.

Matematik Yardımcıları

Kütüphane, 3B işlemler için temel matematik tiplerini içerir.

Vector3

Pozisyonlar, yönler, normaller ve renkler için kullanılan üç bileşenli bir vektör.

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

Çevirme, döndürme ve ölçeklemeyi tek bir işlemde birleştiren 4x4 dönüşüm matrisi.

Matrix4 mat = new Matrix4();
// Matrix4 is used internally by transforms
// and can be retrieved from GlobalTransform

Quaternion

Gimbal kilidini önleyen ve sorunsuz bir şekilde ara değer alabilen bir döndürme temsili. Quaternion’lar, dönüşüm sistemi tarafından dahili olarak kullanılır.

BoundingBox

Uzamsal sorgular, çarpışma kontrolleri ve sahne analizi için eksen hizalı bir sınırlama kutusu.

BoundingBox bbox = new BoundingBox();
// BoundingBox can be computed from mesh geometry

Bilinen Sınırlamalar

Şunu belirtmek gerekir ki Scene.render() dır desteklenmiyor FOSS sürümünde. Çağrıldığında bir UnsupportedOperationException. Kütüphane, dosya tabanlı 3D işleme – yükleme, dönüştürme ve kaydetme – için tasarlanmıştır; gerçek zamanlı renderleme yerine.

Özet

Aspose.3D FOSS for Java’nin temel özellikleri beş alana ayrılır:

AlanSınıflarAmaç
Sahne GrafiğiScene, Node, Entity, Mesh, CameraHiyerarşik model temsili
FormatlarOBJ, STL, glTF/GLB için Yükle/Kaydet seçenekleri; FBX için YükleBiçim bağımsız G/Ç
MateryallerPbrMaterialYüzey görünümü (PBR)
DönüşümlerTransform, GlobalTransformUzamsal konumlandırma
MatematikVector3, Matrix4, Quaternion, BoundingBox3D math primitives

Bir sonraki gönderide, OBJ, STL, glTF ve FBX’i kapsayan, ayrıntılı yükleme ve kaydetme seçenekleriyle pratik format‑format öğreticilerini adım adım inceleyeceğiz.