V úvodním příspěvku, pokryli jsme, co Aspose.3D FOSS pro .NET je a jak začít. Tento příspěvek jde hlouběji do klíčových funkcí, které tvoří knihovnu, s ukázkami kódu pro každou oblast.

Všechny příklady předpokládají následující using direktivu:

using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;

A NuGet balíček:

dotnet add package Aspose.3D --version 26.1.0

Graf scény

Scénový graf je základní datová struktura. A Scene obsahuje RootNode,a každý Node může mít podřízené uzly a připojený Entity (například Mesh nebo Camera).

Vytváření a navigace uzlů

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);

Připojování entit k uzlům

Entity jsou vizuální obsah scény – sítě, kamery a světla. Připojte je pomocí 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");

Vestavěné primitivy

Edice .NET obsahuje třídy parametrických tvarů, které generují geometrii bez ruční konstrukce vrcholů:

PrimitivumPopis
BoxOsa‑zarovnaný kvádr s nastavitelnou šířkou, výškou a hloubkou
SphereParametrická koule s nastavitelným poloměrem
CylinderParametrický válec s nastavitelnými horními/dolními poloměry a výškou

Tyto primitivy mohou být připojeny přímo k uzlům nebo převedeny na Mesh prostřednictvím ToMesh():

var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();

Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);

Konstrukce meshe

Pokud potřebujete plnou kontrolu, vytvořte meshe od nuly pomocí řídicích bodů a definic polygonů:

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 komponenta nastavená na 1.0f pro standardní kartézské pozice. Polygony jsou definovány předáním indexů řídicích bodů do CreatePolygon().

Transformace

Každý NodeTransform vlastnost, která řídí jeho lokální pozici, rotaci a měřítko:

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);

Dědičnost transformací

Transformace se skládají skrze hierarchii scény. Pozice dítěte ve světovém prostoru je výsledkem všech transformací předků:

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

Pouze pro čtení GlobalTransform vlastnost u každého Node poskytuje vypočtenou transformační matici ve světovém prostoru po složení všech transformací předků. Výsledek získáte pomocí node.GlobalTransform.Matrix.

Materiály

Knihovna obsahuje tři typy materiálů s rostoucí složitostí:

LambertMaterial

Klasický materiál pouze s difúzním odrazem:

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šiřuje Lambert o spekulární 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álně založeném renderování 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í texturové sloty pro základní barvu, kovovost/hrubost, normály, emisivní a okluzní mapy prostřednictvím vlastností řetězcových cest k texturám.

Matematické utility

Knihovna poskytuje sadu matematických primitiv pro 3D prostorové operace:

Typy vektorů

TypKomponentyPřesnostBěžné použití
Vector2X, YfloatUV texturové souřadnice
Vector3X, Y, ZfloatObecný 3‑komponentový vektor
Vector4X, Y, Z, WfloatKontrolní body, normály
FVector3X, Y, ZfloatVlastnosti transformace (Posunutí, Měřítko)
FVector4X, Y, Z, WfloatData vrcholových elementů

Kvaternion

Kvaterniony představují rotace 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

Osa‑zarovnané ohraničující krabice pro prostorové dotazy:

// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning

Vrcholové elementy

Mřížky mohou nést další vrstvy dat na vrchol, nad rámec pozic:

  • VertexElementNormal – normály povrchu pro výpočty osvětlení.
  • VertexElementUV – texturové souřadnice pro mapování obrázků na geometrii.
  • VertexElementVertexColor – data RGBA barvy na vrchol.

Každý vrcholový element má MappingMode (na řídící bod, na vrchol polygonu nebo na polygon) a ReferenceMode (přímé hodnoty nebo indexované hodnoty).

Animace

Třída Scene třída podporuje pojmenované animační klipy pomocí CreateAnimationClip() a GetAnimationClip(). V současné FOSS edici jsou vytváření a vyhledávání animačních klipů funkční, ale data klíčových snímků a přehrávání ještě nejsou implementována.

var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");

// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));

Co dál

Další příspěvek se zabývá prací s 3D formáty souborů v .NET – praktický, formát po formátu průvodce pro OBJ, STL, glTF, FBX a 3MF s možnostmi načítání/ukládání a vzory hromadné konverze.