U uvodnom postu, pokrili smo šta je Aspose.3D FOSS za .NET i kako započeti. Ovaj post ide dublje u ključne funkcije koje čine biblioteku, sa primerima koda za svako područje.
Svi primeri pretpostavljaju sledeću using direktivu:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
I NuGet paket:
dotnet add package Aspose.3D --version 26.1.0
Graf scene
Scene graf je osnovna struktura podataka. A Scene sadrži RootNode, i svaki Node može imati podčvorove i prikačeni Entity (kao što je a Mesh ili Camera).
Kreiranje i navigacija čvorova
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);
Priključivanje entiteta na čvorove
Entiteti su vizuelni sadržaj scene – mreže, kamere i svetla. Prikačite ih koristeći 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");
Ugrađene primitive
Izdanje .NET uključuje parametarske klase oblika koje generišu geometriju bez ručnog konstruisanja vrhova:
| Primitiv | Opis |
|---|---|
Box | Kutija poravnata sa osama sa podesivom širinom, visinom i dubinom |
Sphere | Parametarska sfera sa podesivim poluprečnikom |
Cylinder | Parametarski cilindar sa podesivim poluprečnicima na vrhu/dnu i visinom |
Ovi primitivni objekti mogu biti prikačeni direktno na čvorove ili konvertovani u a Mesh preko ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Konstrukcija mreže
Ako vam je potrebna potpuna kontrola, izgradite mreže od nule koristeći kontrolne tačke i definicije poligona:
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");
Kontrolne tačke koriste Vector4 sa w komponenta postavljena na 1.0f za standardne Kartezijanske pozicije. Poligoni se definišu prosleđivanjem indeksa kontrolnih tačaka u CreatePolygon().
Transformacije
Svaki Node ima Transform svojstvo koje kontroliše njegovu lokalnu poziciju, rotaciju i skaliranje:
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);
Nasleđivanje transformacija
Transformacije se sastavljaju kroz hijerarhiju scene. Pozicija deteta u svetskom prostoru je proizvod svih transformacija pretka:
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
Samo za čitanje GlobalTransform svojstvo na svakom Node pruža izračunatu matricu transformacije u svetskom prostoru nakon sastavljanja svih transformacija pretka. Pristupite rezultatu putem node.GlobalTransform.Matrix.
Materijali
Biblioteka uključuje tri tipa materijala sa sve većom složenošću:
LambertMaterial
Klasični materijal samo sa difuzom:
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
Proširuje Lambert sa spekularnim odsjajima:
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
Materijal zasnovan na fizički ispravnom renderovanju koji koristi 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 materijali podržavaju teksturne slotove za osnovnu boju, metalnost/gruboću, normalu, emisiju i mape zaklonjenosti putem svojstava putanje teksture tipa string.
Matematički alati
Biblioteka pruža skup matematičkih primitiva za 3D prostorne operacije:
Tipovi vektora
| Tip | Komponente | Preciznost | Uobičajena upotreba |
|---|---|---|---|
Vector2 | X, Y | float | UV teksturne koordinate |
Vector3 | X, Y, Z | float | Vektor opšte namene sa 3 komponente |
Vector4 | X, Y, Z, W | float | Kontrolne tačke, normale |
FVector3 | X, Y, Z | float | Svojstva transformacije (Translacija, Skala) |
FVector4 | X, Y, Z, W | float | Podaci elementa vrha |
Kvaternion
Kvaternioni predstavljaju rotacije bez gimbal lock‑a:
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
Osno‑poravnati bounding box‑ovi za prostorne upite:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Elementi vrha
Mreže mogu nositi dodatne slojeve podataka po vrhu, pored pozicija:
- VertexElementNormal – normalne površine za proračune osvetljenja.
- VertexElementUV – teksturne koordinate za mapiranje slika na geometriju.
- VertexElementVertexColor – podaci o RGBA boji po vrhu.
Svaki element vrha ima MappingMode (po kontrolnoj tački, po vrhu poligona ili po poligonu) i ReferenceMode (direktne vrednosti ili indeksirane vrednosti).
Animacijski klipovi
The Scene klasa podržava imenovane animacione klipove putem CreateAnimationClip() i GetAnimationClip(). U trenutnoj FOSS ediciji, kreiranje i pretraga animacionih klipova su funkcionalni, ali podaci o ključnim okvirima i reprodukcija još nisu implementirani.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Šta sledi
Sledeći post pokriva rad sa 3D formatima fajlova u .NET – praktični, format-po-format vodič za OBJ, STL, glTF, FBX i 3MF sa opcijama učitavanja/čuvanja i šablonima za grupnu konverziju.