V úvodnom príspevku, pokryli sme, čo Aspose.3D FOSS pre .NET je a ako začať. Tento príspevok sa hlbšie venuje kľúčovým funkciám, ktoré tvoria knižnicu, s príkladmi kódu pre každú oblasť.
Všetky príklady predpokladajú nasledujúci using smerník:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
A NuGet balík:
dotnet add package Aspose.3D --version 26.1.0
Scénový graf
Scénový graf je základná dátová štruktúra. A Scene obsahuje RootNode,môže mať podriadené uzly a pripojený Node (napríklad Entity alebo Mesh Entity sú vizuálny obsah scény – siete, kamery a svetlá. Pripojte ich pomocou Camera).
Vytváranie a navigácia uzlov
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);
Pripájanie entít k uzlom
Primitív 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");
Vstavané primitívy
Edícia .NET obsahuje triedy parametrických tvarov, ktoré generujú geometriu bez manuálnej konštrukcie vrcholov:
| Popis | Osovo zarovnaná krabica s konfigurovateľnou šírkou, výškou a hĺbkou |
|---|---|
Box | Parametrická guľa s konfigurovateľným polomerom |
Sphere | Parametrický valec s konfigurovateľnými hornými/spodnými polomermi a výškou |
Cylinder | Tieto primitívy môžu byť pripojené priamo k uzlom alebo prevedené na |
These primitives can be attached directly to nodes or converted to a Mesh cez ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Konstrukcia siete
Ak potrebujete úplnú kontrolu, vytvorte siete od začiatku pomocou kontrolných bodov a definícií polygonov:
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");
Kontrolné body používajú Vector4 s w komponent nastavený na 1.0f pre štandardné kartézske pozície. Polygóny sú definované odovzdávaním indexov kontrolných bodov do CreatePolygon().
Transformácie
Každý Node má Transform vlastnosť, ktorá riadi jeho lokálnu pozíciu, rotáciu a mierku:
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);
Dedičnosť transformácií
Transformácie sa skladajú cez hierarchiu scény. Svetová pozícia dieťaťa je súčinom všetkých transformácií predkov:
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
Iba na čítanie GlobalTransform vlastnosť na každom Node poskytuje vypočítanú maticu transformácie vo svetovom priestore po zložením všetkých transformácií predkov. Výsledok získate cez node.GlobalTransform.Matrix.
Materiály
Knižnica obsahuje tri typy materiálov s rastúcou zložitosťou:
LambertMaterial
Klasický materiál len s difúznym odrazom:
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
Rozširuje Lambert o spekulárne odlesky:
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
Materiál založený na fyzikálne založenom renderovaní používaný v 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;
Materiály PBR podporujú textúrové sloty pre základnú farbu, kovovosť/hrubosť, normálu, emisívnu a oklúznu mapu prostredníctvom vlastností s reťazcovou cestou k textúre.
Matematické nástroje
Knižnica poskytuje sadu matematických primitív pre 3D priestorové operácie:
Typy vektorov
| Typ | Komponenty | Presnosť | Bežné použitie |
|---|---|---|---|
Vector2 | X, Y | float | UV textúrové súradnice |
Vector3 | X, Y, Z | float | Všeobecný 3-komponentový vektor |
Vector4 | X, Y, Z, W | float | Kontrolné body, normály |
FVector3 | X, Y, Z | float | Vlastnosti transformácie (Posunutie, Mierka) |
FVector4 | X, Y, Z, W | float | Dáta prvku vrchola |
Kvaternion
Kvaterniony predstavujú rotácie bez gimbal locku:
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
Osiovo zarovnané ohraničujúce krabice pre priestorové dotazy:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Vrcholové elementy
Mriežky môžu niesť ďalšie vrstvy dát na vrchol nad rámec pozícií:
- VertexElementNormal – normály povrchu pre výpočty osvetlenia.
- VertexElementUV – textúrové súradnice pre mapovanie obrázkov na geometriu.
- VertexElementVertexColor – dáta farby RGBA na vrchole.
Každý vertexový prvok má MappingMode (na kontrolný bod, na vrchol polygonu alebo na polygon) a ReferenceMode (priamé hodnoty alebo indexované hodnoty).
Klipy animácie
Tá Scene trieda podporuje pomenované animačné klipy cez CreateAnimationClip() a GetAnimationClip(). V aktuálnej FOSS edícii je tvorba a vyhľadávanie animačných klipov funkčné, ale dáta kľúčových snímok a prehrávanie ešte nie sú implementované.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Čo ďalej
Nasledujúci príspevok pokrýva prácu s 3D formátmi súborov v .NET – praktický, formát po formáte sprievodca pre OBJ, STL, glTF, FBX a 3MF s možnosťami načítania/ukladania a vzormi dávkovej konverzie.