Sahne Grafiğiyle Çalışma

Sahne Grafiğiyle Çalışma

Sahne Grafiğiyle Çalışma

Her 3B sahne, Aspose.3D içinde .NET için, bir ağaç yapısı olarak düzenlenir Node nesneler. Scene.RootNode o ağaç yapısının köküdür ve geometrinin, malzemenin ve dönüşümün her parçası, onun altında bir çocuk ya da torun 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":

using Aspose.ThreeD;

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

Alt Düğümler Eklemek

Call CreateChildNode() herhangi bir düğümde bir çocuk eklemek için. Yöntemin üç yaygın olarak kullanılan aşırı yüklemesi vardır:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();
Node root = scene.RootNode;

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

// 2. Named node with an entity
var box = new Box(2, 2, 2);
Node boxNode = root.CreateChildNode("box", box);

// 3. Named node with entity and material
var mat = new Aspose.ThreeD.Shading.PhongMaterial("red");
mat.Diffuse = new Vector4(0.8, 0.2, 0.2, 1.0);
Node decorated = pivot.CreateChildNode("red_box", box, mat);

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

var 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)
    Console.WriteLine("Found: " + found.Name);

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

// Iterate all direct children
foreach (Node child in root.ChildNodes)
    Console.WriteLine(child.Name);

GetChild(string name) sadece arar doğrudan çocukları, tam alt ağacı değil. Bir özyinelemeli yardımcı fonksiyon veya Accept() tüm ağacı aramak için.


Tam Ağacı Gezinme

Tam bir derinlik öncelikli yürüyüş için, yineleyin ChildNodes özyinelemeli olarak:

static void Walk(Node node, int depth = 0)
{
    Console.WriteLine(new string(' ', depth * 2) + node.Name);
    foreach (var child in node.ChildNodes)
        Walk(child, depth + 1);
}

Walk(scene.RootNode);

Erken çıkışlı gezinme için, node.Accept(NodeVisitor) mevcuttur ve ziyaretçiyi her toruna çağırır, ziyaretçi döndürene kadar false.


Using Group to Organize Related Objects

Group geometri eklemeden düğümleri mantıksal olarak düzenleyen bir kapsayıcı varlıktır. Çocukları mantıksal bir birimi temsil eden bir düğüme ekleyin:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;

var scene = new Scene();

// A group node for all furniture in a room
var furnitureGroup = new Group("furniture");
Node roomNode = scene.RootNode.CreateChildNode("living_room", furnitureGroup);

// Child nodes under the group node
Node sofaNode  = roomNode.CreateChildNode("sofa",         new Box(3, 1, 1));
Node tableNode = roomNode.CreateChildNode("coffee_table", new Box(2, 0.5, 1));

Taşıma roomNode tüm mobilyaları birlikte dönüştürür çünkü çocuklar onun mirasını alır Transform.


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 = scene.RootNode.CreateChildNode("ground_plane", new Box(100, 0.1, 100));
ground.Visible = false;       // hidden in viewport / renderer

Node helperNode = scene.RootNode.CreateChildNode("debug_arrow", new Box());
helperNode.Excluded = true;   // omitted from all export operations

Visible = false bir görüntüleme ipucu. Excluded = 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 (Entity özellik), ancak ek varlıkları şu yol ile tutabilir AddEntity(). Bu, farklı ağ parçalarının tek bir dönüşümü paylaşması durumunda faydalıdır:

var bodyMesh  = new Mesh("body");
var wheelMesh = new Mesh("wheel");

Node carNode = scene.RootNode.CreateChildNode("car");
carNode.AddEntity(bodyMesh);
carNode.AddEntity(wheelMesh);

// Retrieve all entities on this node
foreach (Entity ent in carNode.Entities)
    Console.WriteLine(ent.GetType().Name + ": " + ent.Name);

Düğümleri Birleştirme

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

Node lod0 = scene.RootNode.CreateChildNode("lod0");
lod0.CreateChildNode("mesh_high", new Box(1, 1, 1));

Node lod1 = scene.RootNode.CreateChildNode("lod1");
lod1.CreateChildNode("mesh_low", new Box(1, 1, 1));

// 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.RootNodeSahne ağacının kökü; her zaman mevcut olur new Scene()
node.CreateChildNode(name)Varlığı olmayan adlandırılmış bir alt düğüm oluştur
node.CreateChildNode(name, entity)Varlığı olan adlandırılmış bir alt düğüm oluştur
node.CreateChildNode(name, entity, material)Varlığı ve malzemesi olan 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 öğeyi bul; döndürür null bulunamazsa
node.GetChild(index)Verilen bir indeksdeki doğrudan alt öğeyi al
node.ChildNodesIList<Node> tüm doğrudan alt öğelerden
node.Accept(visitor)Bu düğümü ve tüm alt düğümleri derinlik öncelikli olarak gez
node.AddEntity(entity)Düğüm’e ek bir varlık ekle
node.EntitiesIList<Entity> bu düğümdeki tüm varlıklardan
node.VisibleDüğümü göster ya da gizle
node.ExcludedDüğümü dışa aktarmaya dahil et ya da hariç tut
node.Merge(other)Tüm alt öğeleri ve varlıkları şuradan taşı other bu düğüme
new Group(name)Alt düğümleri mantıksal olarak gruplamak için kapsayıcı varlık
 Türkçe