İçinde giriş gönderisi, Aspose.3D FOSS for .NET ne olduğunu ve nasıl başlanacağını ele aldık. Bu gönderi, kütüphaneyi oluşturan temel özelliklere daha derinlemesine bakıyor, her alan için kod örnekleri sunuyor.
Tüm örnekler aşağıdaki using yönergesini varsayar:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
Ve NuGet paketi:
dotnet add package Aspose.3D --version 26.1.0
Sahne Grafiği
Sahne grafiği temel veri yapısıdır. Bir Scene içerir bir RootNode,çocuk düğümlere ve eklenmiş bir Node (örneğin bir Entity veya Mesh Varlıklar sahnenin görsel içeriğidir – ağlar, kameralar ve ışıklar. Bunları şu şekilde ekleyin Camera).
Düğümler Oluşturma ve Gezinti
var scene = new Scene();
// Create a hierarchy
var parent = scene.RootNode.CreateChildNode("Parent");
var child1 = parent.CreateChildNode("Child1");
var child2 = parent.CreateChildNode("Child2");
// Navigate the tree
Console.WriteLine("Root children: " + scene.RootNode.ChildNodes.Count);
Console.WriteLine("Parent children: " + parent.ChildNodes.Count);
Entity’leri Düğümlere Bağlama
İlkel CreateChildNode:
var scene = new Scene();
// Create a box primitive and attach it to the scene
var box = new Box(2, 2, 2);
var boxNode = scene.RootNode.CreateChildNode("BoxNode", box);
// Create a sphere primitive
var sphere = new Sphere(1);
var sphereNode = scene.RootNode.CreateChildNode("SphereNode", sphere);
scene.Save("primitives.gltf");
Yerleşik Primitifler
.NET sürümü, manuel vertex oluşturma gerektirmeden geometri üreten parametrik şekil sınıflarını içerir:
| Açıklama | Eksen hizalı kutu, ayarlanabilir genişlik, yükseklik ve derinlik ile |
|---|---|
Box | Parametrik küre, ayarlanabilir yarıçap ile |
Sphere | Parametrik silindir, ayarlanabilir üst/alt yarıçaplar ve yükseklik ile |
Cylinder | Bu ilkelere doğrudan düğümlere eklenebilir veya bir …’e dönüştürülebilir |
Bu ilkelere doğrudan düğümlere eklenebilir veya bir Mesh aracılığıyla ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Mesh Oluşturma
Tam kontrol ihtiyacınız varsa, kontrol noktaları ve çokgen tanımları kullanarak sıfırdan mesh’ler oluşturun:
var mesh = new Mesh();
// Add vertex positions
mesh.ControlPoints.Add(new Vector4(0, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(1, 0, 0, 1.0f));
mesh.ControlPoints.Add(new Vector4(0.5f, 1, 0, 1.0f));
// Define a triangle face
mesh.CreatePolygon(0, 1, 2);
// Attach to a scene
var scene = new Scene();
scene.RootNode.CreateChildNode("triangle", mesh);
scene.Save("triangle.stl");
Kontrol noktaları kullanır Vector4 ile w bileşen şu şekilde ayarlandı 1.0f standart Kartezyen konumlar için. Poligonlar, kontrol noktası indekslerini şuna geçirerek tanımlanır: CreatePolygon().
Dönüşümler
Her Node bir Transform yerel konumunu, dönüşünü ve ölçeğini kontrol eden bir özellik:
var scene = new Scene();
var node = scene.RootNode.CreateChildNode("Moved");
node.Transform.Translation = new FVector3(5, 0, 0);
node.Transform.Scale = new FVector3(2, 2, 2);
Transform Kalıtımı
Dönüşümler sahne hiyerarşisi boyunca birleştirilir. Bir çocuğun dünya uzayı konumu, tüm üst öğe dönüşümlerinin çarpımıdır:
var scene = new Scene();
var parent = scene.RootNode.CreateChildNode("Parent");
parent.Transform.Translation = new FVector3(10, 0, 0);
var child = parent.CreateChildNode("Child");
child.Transform.Translation = new FVector3(5, 0, 0);
// Child's world position is (15, 0, 0)
// Access via child.GlobalTransform
GlobalTransform
Salt okunur GlobalTransform her birindeki özellik Node tüm üst nesne dönüşümlerini birleştirdikten sonra hesaplanan dünya uzayı dönüşüm matrisini sağlar. Sonucu şu şekilde erişin: node.GlobalTransform.Matrix.
Materyaller
Kütüphane, artan karmaşıklıkta üç materyal türü içerir:
LambertMaterial
Klasik sadece difüz materyal:
var material = new LambertMaterial("WoodMaterial");
material.Diffuse = new Vector4(0.6f, 0.4f, 0.2f, 1.0f);
material.Ambient = new Vector4(0.1f, 0.1f, 0.1f, 1.0f);
material.Transparency = 0.0f;
PhongMaterial
Lambert’i speküler vurgularla genişletir:
var material = new PhongMaterial("ShinyMetal");
material.Specular = new Vector4(0.8f, 0.8f, 0.8f, 1.0f);
material.Shininess = 50.0f;
material.SpecularPower = 32.0f;
PbrMaterial
glTF 2.0 tarafından kullanılan fiziksel tabanlı render materyali:
var material = new PbrMaterial("GoldPBR");
material.BaseColor = new Vector4(1.0f, 0.8f, 0.2f, 1.0f);
material.Metallic = 0.9f;
material.Roughness = 0.1f;
material.Occlusion = 1.0f;
PBR materyaller, temel renk, metalik/çözünürlük, normal, emissive ve occlusion haritaları için dize doku yolu özellikleri aracılığıyla doku yuvalarını destekler.
Matematik Yardımcı Araçları
Kütüphane, 3B uzamsal işlemler için bir dizi matematiksel ilkel sağlar:
Vektör Türleri
| Tür | Bileşenler | Hassasiyet | Ortak Kullanım |
|---|---|---|---|
Vector2 | X, Y | float | UV doku koordinatları |
Vector3 | X, Y, Z | float | Genel amaçlı 3 bileşenli vektör |
Vector4 | X, Y, Z, W | float | Kontrol noktaları, normaller |
FVector3 | X, Y, Z | float | Dönüşüm özellikleri (Yer değiştirme, Ölçek) |
FVector4 | X, Y, Z, W | float | Vertex öğesi verileri |
Quaternion
Quaternionlar, gimbal kilidi olmadan dönüşleri temsil eder:
var rotation = new Quaternion(0, 0, 0, 1); // Identity
node.Transform.Rotation = rotation;
Matrix4
4x4 transformation matrices for composing transforms:
// Matrix operations are used internally by Transform
// and GlobalTransform for world-space computation
BoundingBox
Mekânsal sorgular için eksen hizalı sınırlama kutuları:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Vertex Elemanları
Mesh’ler, konumların ötesinde ek per-vertex veri katmanları taşıyabilir:
- VertexElementNormal – aydınlatma hesaplamaları için yüzey normalleri.
- VertexElementUV – görüntüleri geometriye eşlemek için doku koordinatları.
- VertexElementVertexColor – vertex başına RGBA renk verileri.
Her vertex öğesinin bir MappingMode (kontrol noktası başına, poligon vertex’i başına veya poligon başına) ve bir ReferenceMode (doğrudan değerler veya indeksli değerler).
Animation Clips
Bu Scene sınıf, adlandırılmış animasyon kliplerini şunun aracılığıyla destekler CreateAnimationClip() ve GetAnimationClip(). Mevcut FOSS sürümünde, animasyon klip oluşturma ve arama işlevsel, ancak anahtar kare verileri ve oynatma henüz uygulanmadı.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Sıradaki
Sonraki gönderi şunları kapsar .NET içinde 3D dosya formatlarıyla çalışma – OBJ, STL, glTF, FBX ve 3MF için yükleme/kaydetme seçenekleri ve toplu dönüşüm kalıplarıyla pratik, format‑format kılavuzu.