Š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īvs | Apraksts |
|---|---|
Box | Aksiālu līnijām saskaņota kaste ar konfigurējamu platumu, augstumu un dziļumu |
Sphere | Parametriska sfēra ar konfigurējamu rādiusu |
Cylinder | Parametriskais 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
| Tips | Komponentes | Precizitāte | Biežākā lietošana |
|---|---|---|---|
Vector2 | X, Y | float | UV tekstūras koordinātas |
Vector3 | X, Y, Z | float | Vispārējais 3-komponentu vektors |
Vector4 | X, Y, Z, W | float | Kontroles punkti, normāles |
FVector3 | X, Y, Z | float | Transformācijas īpašības (Pārvietošana, Skalēšana) |
FVector4 | X, Y, Z, W | float | Virsotnes 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.