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ů:
| Primitivum | Popis |
|---|---|
Box | Osa‑zarovnaný kvádr s nastavitelnou šířkou, výškou a hloubkou |
Sphere | Parametrická koule s nastavitelným poloměrem |
Cylinder | Parametrický 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ý Node má Transform 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ů
| Typ | Komponenty | Přesnost | Běžné použití |
|---|---|---|---|
Vector2 | X, Y | float | UV texturové souřadnice |
Vector3 | X, Y, Z | float | Obecný 3‑komponentový vektor |
Vector4 | X, Y, Z, W | float | Kontrolní body, normály |
FVector3 | X, Y, Z | float | Vlastnosti transformace (Posunutí, Měřítko) |
FVector4 | X, Y, Z, W | float | Data 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.