İç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çıklamaEksen hizalı kutu, ayarlanabilir genişlik, yükseklik ve derinlik ile
BoxParametrik küre, ayarlanabilir yarıçap ile
SphereParametrik silindir, ayarlanabilir üst/alt yarıçaplar ve yükseklik ile
CylinderBu 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ürBileşenlerHassasiyetOrtak Kullanım
Vector2X, YfloatUV doku koordinatları
Vector3X, Y, ZfloatGenel amaçlı 3 bileşenli vektör
Vector4X, Y, Z, WfloatKontrol noktaları, normaller
FVector3X, Y, ZfloatDönüşüm özellikleri (Yer değiştirme, Ölçek)
FVector4X, Y, Z, WfloatVertex öğ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.