Šajā ievadda ziņa, mēs apskatījām, kas ir Aspose.3D FOSS priekš .NET un kā sākt. Šajā rakstā mēs dziļāk aplūkojam galvenās funkcijas, kas veido bibliotēku, ar koda piemēriem katram laukam.

Visi piemēri pieņem sekojošu using norādi:

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

Un NuGet pakotne:

dotnet add package Aspose.3D --version 26.1.0

Ainas grafiks

Aina grafs ir galvenā datu struktūra. A Scene satur a RootNode, un katrs Node var būt bērna mezgli un pievienots Entity (piemēram Mesh vai Camera).

Mezglu izveide un pārvietošanās

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);

Entītiju pievienošana mezgliem

Entītijas ir ainas vizuālais saturs – tīkli, kameras un gaismas. Pievienojiet tās, izmantojot 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");

Iebūvēti primitīvi

.NET izdevums ietver parametriskās formas klases, kas ģenerē ģeometriju bez manuālas virsotņu konstrukcijas:

PrimitīvsApraksts
BoxAksiālu līnijām saskaņota kaste ar konfigurējamu platumu, augstumu un dziļumu
SphereParametriska sfēra ar konfigurējamu rādiusu
CylinderParametriskais cilindrs ar konfigurējamiem augšējā/apakšējā rādiusiem un augstumu

Šīs primitīvas var pievienot tieši mezgliem vai pārveidot par Mesh caur ToMesh():

var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();

Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);

Mesh konstrukcija

Ja nepieciešama pilna kontrole, veido tīklus no nulles, izmantojot kontroles punktus un daudzstūru definīcijas:

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");

Kontroles punkti izmanto Vector4 ar w komponents iestatīts uz 1.0f standarta Dekarta pozīcijām. Poligoni tiek definēti, nododot kontroles punktu indeksus uz CreatePolygon().

Transformācijas

Katrs Node ir Transform īpašība, kas kontrolē tā lokālo pozīciju, rotāciju un mērogu:

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ācijas mantošana

Transformācijas tiek sastādītas caur ainas hierarhiju. Bērna pasaules koordinātu pozīcija ir visu priekšgājēju transformāciju reizinājums:

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

Tikai lasāma GlobalTransform īpašība katram Node sniedz aprēķināto pasaules telpas transformācijas matricu pēc visu priekšgājēju transformāciju apvienošanas. Piekļūst rezultātam caur node.GlobalTransform.Matrix.

Materiāli

Bibliotēka ietver trīs materiālu tipus ar pieaugošu sarežģītību:

LambertMaterial

Klasisks tikai difūzs materiāls:

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

Paplašina Lambert materiālu ar spekulāriem spīdumiem:

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

Fiziski balstīta renderēšanas materiāls, ko izmanto glTF 2.0:

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 materiāli atbalsta tekstūru slotus pamata krāsai, metāliski/raušums, normālām, emisijas un aizklājuma kartēm, izmantojot virknes tekstūras ceļa īpašības.

Matemātikas utilītprogrammas

Bibliotēka nodrošina kopumu matemātisko primitīvu 3D telpiskām operācijām:

Vektoru tipi

TipsKomponentesPrecizitāteBiežākā lietošana
Vector2X, YfloatUV tekstūras koordinātas
Vector3X, Y, ZfloatVispārējais 3-komponentu vektors
Vector4X, Y, Z, WfloatKontroles punkti, normāles
FVector3X, Y, ZfloatTransformācijas īpašības (Pārvietošana, Skalēšana)
FVector4X, Y, Z, WfloatVirsotnes elementa dati

Kvaternions

Kvaternioni attēlo rotācijas bez gimbal lock:

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

Asīm saskaņotas (axis-aligned) bounding boxi telpiskām vaicājumiem:

// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning

Virsotnes elementi

Tīkli var nesēt papildu uz-virsotnes datu slāņus, pāri pozīcijām:

  • VertexElementNormal – virsmas normāles apgaismojuma aprēķiniem.
  • VertexElementUV – tekstūras koordinātas attēlu kartēšanai uz ģeometrijas.
  • VertexElementVertexColor – katras virsotnes RGBA krāsu dati.

Katram virsotnes elementam ir MappingMode (uz kontroles punktu, uz daudzstūra virsotni vai uz daudzstūri) un ReferenceMode (tiešas vērtības vai indeksētas vērtības).

Animācijas klipi

Šī Scene klase atbalsta nosauktus animācijas klipus, izmantojot CreateAnimationClip() un GetAnimationClip(). Pašreizējā FOSS izdevumā animācijas klipu izveide un meklēšana ir funkcionāla, bet atslēgkadru dati un atskaņošana vēl nav īstenota.

var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");

// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));

Kas nākamais

Nākamais ieraksts aptver darbu ar 3D failu formātiem .NET – praktisku, formāts-pa-formātam ceļvedi uz OBJ, STL, glTF, FBX un 3MF ar ielādes/saglabāšanas opcijām un grupas konvertēšanas modeļiem.