Į įžanginis įrašas, mes aptarėme, kas yra Aspose.3D FOSS skirta .NET ir kaip pradėti. Šiame įraše gilinamasi į pagrindines bibliotekos savybes, pateikiant kodo pavyzdžius kiekvienai sričiai.
Visi pavyzdžiai daro prielaidą, kad naudojama ši using direktyva:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
Ir NuGet paketas:
dotnet add package Aspose.3D --version 26.1.0
Scenos grafikas
Scenos grafikas yra pagrindinė duomenų struktūra. A Scene turi RootNode, ir kiekvienas Node gali turėti vaikų mazgus ir prijungtą Entity (pvz., Mesh arba Camera).
Mazgų kūrimas ir naršymas
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);
Objektų (Entity) prijungimas prie mazgų
Entitetai yra scenos vizualinis turinys – tinkleliai, kameros ir šviesos. Priskirkite juos naudodami 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");
Įtaisytosios primityvos
„.NET“ leidimas apima parametrines formų klases, kurios generuoja geometriją be rankinio viršūnių (vertex) kūrimo:
| Primityvus | Aprašymas |
|---|---|
Box | Ašies lygiuota dėžė su konfigūruojamu pločiu, aukščiu ir gylio |
Sphere | Parametrinė sfera su konfigūruojamu spinduliu |
Cylinder | Parametrinis cilindras su konfigūruojamais viršutinio/apatinio spinduliais ir aukščiu |
Šie primityvai gali būti tiesiogiai priskiriami mazgams arba konvertuojami į Mesh per ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Tinklo (Mesh) konstrukcija
Jei reikia visiškos kontrolės, sukurkite tinklus nuo nulio naudodami kontrolinius taškus ir daugiakampių apibrėžimus:
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");
Kontroliniai taškai naudoja Vector4 su w komponentas nustatytas į 1.0f standartinėms Dekarto pozicijoms. Poligonai apibrėžiami perduodant valdymo taškų indeksus į CreatePolygon().
Transformacijos
Kiekvienas Node turi Transform savybę, kuri valdo jo vietinę padėtį, sukimosi kampą ir mastelį:
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);
Transformacijos paveldėjimas
Transformacijos susijungia per scenos hierarchiją. Vaiko pasaulio erdvės pozicija yra visų tėvų transformacijų sandauga:
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
Tik skaitymui skirta GlobalTransform savybė kiekvienam Node pateikia apskaičiuotą pasaulio erdvės transformacijos matricą po visų tėvų transformacijų sujungimo. Gauti rezultatą per node.GlobalTransform.Matrix.
Medžiagos
Biblioteka apima tris medžiagų tipus, kurių sudėtingumas didėja:
LambertMaterial
Klasikinė tik difuzinė medžiaga:
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
Papildo Lambert su spekuliariniais švytėjimais:
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
Fizinės bazės atvaizdavimo (PBR) medžiaga, naudojama 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 medžiagos palaiko tekstūrų lizdus bazinės spalvos, metalinio/žvilgsnio, normalės, šviesos ir užtemimo žemėlapiams per tekstūros kelio savybes (string).
Matematinės priemonės
Biblioteka suteikia rinkinį matematikos primityvų 3D erdvės operacijoms:
Vektorių tipai
| Tipas | Komponentai | Tikslumas | Įprastas naudojimas |
|---|---|---|---|
Vector2 | X, Y | float | UV tekstūros koordinatės |
Vector3 | X, Y, Z | float | Bendrosios paskirties 3 komponentų vektorius |
Vector4 | X, Y, Z, W | float | Kontroliniai taškai, normalės |
FVector3 | X, Y, Z | float | Transformacijos savybės (Poslinkis, Mastelis) |
FVector4 | X, Y, Z, W | float | Viršūnės elemento duomenys |
Kvaternionas
Kvaternionai atvaizduoja sukimus be 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
Ašimis lygiuotos ribų dėžės erdviniams užklausoms:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Viršūnių elementai
Tinklai gali turėti papildomų duomenų sluoksnių kiekvienai viršūnei, be pozicijų:
- VertexElementNormal – paviršiaus normalių apšvietimo skaičiavimams.
- VertexElementUV – tekstūros koordinatės, skirtos atvaizdų susiejimui su geometrija.
- VertexElementVertexColor – per-viršūnės RGBA spalvų duomenys.
Kiekvienas viršūnės elementas turi MappingMode (per valdymo taškas, per daugiakampio viršūnę arba per daugiakampį) ir ReferenceMode (tiesiogines reikšmes arba indeksuotas reikšmes).
Animacijos klipai
Ši Scene klasė palaiko pavadintus animacijos klipus per CreateAnimationClip() ir GetAnimationClip(). Dabartinėje FOSS versijoje animacijos klipų kūrimas ir paieška veikia, tačiau raktų kadrų duomenys ir atkūrimas dar neįgyvendinti.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Kas toliau
Kitas įrašas apima darbo su 3D failų formatais .NET – praktiškas, formatas po formato vadovas OBJ, STL, glTF, FBX ir 3MF, su įkėlimo/įrašymo parinktimis ir masinio konvertavimo šablonais.