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 operationsVisible = 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 emptySonraki Adımlar
- Dönüşümleri Uygulama — konumlandırma, döndürme ve ölçekleme, herhangi bir düğümü kullanarak
Transform - İlkel Geometri Oluşturma — kullan
Box,Sphere, veCylindersahne varlıkları olarak - Ağlar Oluşturma ve Çalışma — çokgen geometri oluştur ve düğümlere ekle
API Hızlı Başvuru
| Üye | Açıklama |
|---|---|
scene.RootNode | Sahne 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.ChildNodes | IList<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.Entities | IList<Entity> bu düğümdeki tüm varlıklardan |
node.Visible | Düğümü göster ya da gizle |
node.Excluded | Düğü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 |