Sahne Grafiğiyle Çalışma

Sahne Grafiğiyle Çalışma

Sahne Grafiğiyle Çalışma

Her 3D sahne, Aspose.3D for Java içinde, bir ağaç yapısı olarak düzenlenir Node nesneler. Scene tek bir kök sağlar — getRootNode() — ve her geometri, malzeme ve dönüşüm parçası, o kökün altında bir çocuk ya da torun düğüm olarak bulunur.


Sahneyi Oluşturma ve Kök Düğümüne Erişme

Scene otomatik olarak, adlandırılmış bir kök düğümle başlatılır "RootNode":

import com.aspose.threed.Scene;
import com.aspose.threed.Node;

Scene scene = new Scene();
Node root = scene.getRootNode(); // always "RootNode"

Alt Düğümler Eklemek

Çağır createChildNode() herhangi bir düğümde bir çocuk eklemek için. Metodun üç yaygın olarak kullanılan aşırı yüklemesi vardır:

import com.aspose.threed.*;

Scene scene = new Scene();
Node root = scene.getRootNode();

// 1. Named node with no entity — useful as a pivot or group container
Node pivot = root.createChildNode("pivot");

// 2. Named node with an entity
Mesh mesh = new Mesh("box");
mesh.getControlPoints().add(new Vector4(0, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 0, 0));
mesh.getControlPoints().add(new Vector4(1, 1, 0));
mesh.getControlPoints().add(new Vector4(0, 1, 0));
mesh.createPolygon(0, 1, 2, 3);
Node meshNode = root.createChildNode("box", mesh);

// 3. Named node with entity and material
PbrMaterial mat = new PbrMaterial("red");
mat.setAlbedo(new Vector4(0.8f, 0.2f, 0.2f, 1.0f));
Node decorated = pivot.createChildNode("red_box", mesh, mat);

Ayrı ayrı oluşturulmuş bir düğümü eklemek için, kullanın addChildNode():

Node detached = new Node("standalone");
root.addChildNode(detached);

Alt Düğümleri Sorgulama

İsme ya da indekse göre doğrudan bir alt düğüm bulun, ya da tüm doğrudan alt düğümleri yineleyin:

// By name — returns null if no direct child has that name
Node found = root.getChild("box");
if (found != null) {
    System.out.println("Found: " + found.getName());
}

// By index
Node first = root.getChild(0);

// Iterate all direct children
for (Node child : root.getChildNodes()) {
    System.out.println(child.getName());
}

getChild(String name) sadece arar doğrudan çocukları, tam alt ağacı değil. Kullan accept() tüm ağacı aramak için.


Tam Ağacı Gezinme

node.accept(NodeVisitor) bir düğümü ve tüm torunlarını derinlik öncelikli sırada dolaşır. Ziyaretçi döndürür true devam etmek için veya false erken durdurmak için:

import com.aspose.threed.NodeVisitor;

// Print every node name in the scene
scene.getRootNode().accept(n -> {
    System.out.println(n.getName());
    return true; // false would stop traversal
});

// Stop after finding the first node that has an entity
final Node[] found = {null};
scene.getRootNode().accept(n -> {
    if (n.getEntity() != null) {
        found[0] = n;
        return false; // stop walking
    }
    return true;
});

NodeVisitor tek metodlu bir arayüzdür, bu yüzden Java 8+ içinde bir lambda kabul eder.


Görünürlüğü ve Dışa Aktarım Hariç Tutmayı Kontrol Etme

Düğümler, hiyerarşiden kaldırılmadan gizlenebilir veya dışa aktarmadan hariç tutulabilir:

Node ground = root.createChildNode("ground_plane", mesh);
ground.setVisible(false);       // hidden in viewport / renderer

Node helperNode = root.createChildNode("debug_arrow", mesh);
helperNode.setExcluded(true);   // omitted from all export operations

setVisible(false) bir görüntüleme ipucu. setExcluded(true) biçim ne olursa olsun, düğümün dışa aktarılan dosyalarda görünmesini engeller.


Bir Düğüm’e Birden Çok Varlık Ekleme

Bir düğüm bir birincil varlık (getEntity() / setEntity()), ancak ek varlıkları şunun aracılığıyla tutabilir addEntity(). Bu, farklı ağ parçalarının tek bir dönüşümü paylaşması durumunda faydalıdır:

Mesh body  = new Mesh("body");
Mesh wheel = new Mesh("wheel");

Node carNode = root.createChildNode("car");
carNode.addEntity(body);
carNode.addEntity(wheel);

// Retrieve all entities on this node
for (Entity ent : carNode.getEntities()) {
    System.out.println(ent.getName());
}

Düğümleri Birleştirme

merge() kaynak düğümden hedef düğüme tüm alt öğeleri, varlıkları ve materyalleri taşır. Kaynak düğüm boş bırakılır:

Node lod0 = root.createChildNode("lod0");
lod0.createChildNode("mesh_high", mesh);

Node lod1 = root.createChildNode("lod1");
lod1.createChildNode("mesh_low", mesh);

// Consolidate lod0 children into lod1
lod1.merge(lod0);
// lod1 now has both mesh_high and mesh_low; lod0 is empty

Sonraki Adımlar


API Hızlı Başvuru

ÜyeAçıklama
scene.getRootNode()Sahne ağacının kökü; her zaman şundan sonra mevcuttur new Scene()
node.createChildNode(name)Varlık olmadan adlandırılmış bir alt düğüm oluştur
node.createChildNode(name, entity)Varlıklı adlandırılmış bir alt düğüm oluştur
node.createChildNode(name, entity, material)Varlık ve materyal içeren adlandırılmış bir alt düğüm oluştur
node.addChildNode(node)Ayrı ayrı oluşturulmuş bir şeyi ekle Node
node.getChild(name)İsme göre doğrudan bir alt öğe bul; döndürür null bulunamazsa
node.getChild(index)Belirli bir indeksteki doğrudan çocuğu al
node.getChildNodes()List<Node> tüm doğrudan çocukların
node.accept(visitor)Bu düğümü ve tüm alt düğümleri derinlik öncelikli olarak dolaş
node.addEntity(entity)Düğüme ek bir varlık ekle
node.getEntities()List<Entity> bu düğümdeki tüm varlıkların
node.setVisible(bool)Düğümü göster ya da gizle
node.setExcluded(bool)Düğümü dışa aktarmaya dahil et ya da hariç tut
node.merge(other)Şuradan tüm alt öğeleri ve varlıkları taşı other bu düğüme
 Türkçe