Į įž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:

PrimityvusAprašymas
BoxAšies lygiuota dėžė su konfigūruojamu pločiu, aukščiu ir gylio
SphereParametrinė sfera su konfigūruojamu spinduliu
CylinderParametrinis 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

TipasKomponentaiTikslumasĮprastas naudojimas
Vector2X, YfloatUV tekstūros koordinatės
Vector3X, Y, ZfloatBendrosios paskirties 3 komponentų vektorius
Vector4X, Y, Z, WfloatKontroliniai taškai, normalės
FVector3X, Y, ZfloatTransformacijos savybės (Poslinkis, Mastelis)
FVector4X, Y, Z, WfloatViršū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.