İç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:
| Alan | Sınıflar | Amaç |
|---|---|---|
| Sahne Grafiği | Scene, Node, Entity, Mesh, Camera | Hiyerarşik model temsili |
| Formatlar | OBJ, STL, glTF/GLB için Yükle/Kaydet seçenekleri; FBX için Yükle | Biçim bağımsız G/Ç |
| Materyaller | PbrMaterial | Yüzey görünümü (PBR) |
| Dönüşümler | Transform, GlobalTransform | Uzamsal konumlandırma |
| Matematik | Vector3, Matrix4, Quaternion, BoundingBox | 3D 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.