En el publicació d’introducció, vam cobrir què és Aspose.3D FOSS per a .NET i com començar. Aquesta publicació aprofundeix en les característiques clau que conformen la biblioteca, amb exemples de codi per a cada àrea.
Tots els exemples assumeixen la següent directiva using:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
I el paquet NuGet:
dotnet add package Aspose.3D --version 26.1.0
El gràfic d’escena
El graf de l’escena és l’estructura de dades central. Un Scene conté un RootNode, i cada Node pot tenir nodes fills i un adjunt Entity (com ara un Mesh o Camera).
Creació i navegació de nodes
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);
Adjunció d’entitats a nodes
Les entitats són el contingut visual de l’escena – malles, càmeres i llums. Adjunta-les mitjançant 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");
Primitius integrats
L’edició .NET inclou classes de formes paramètriques que generen geometria sense construcció manual de vèrtexs:
| Primitiu | Descripció |
|---|---|
Box | Caixa alineada amb els eixos amb amplada, alçada i profunditat configurables |
Sphere | Esfera paramètrica amb radi configurable |
Cylinder | Cilindre paramètric amb radis superior/inferior configurables i alçada |
Aquestes primitives es poden adjuntar directament a nodes o convertir en una Mesh via ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Construcció de malla
Si necessiteu control total, construïu malles des de zero utilitzant punts de control i definicions de polígons:
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");
Els punts de control utilitzen Vector4 amb el w component establert a 1.0f per a posicions cartesianes estàndard. Els polígons es defineixen passant índexs de punts de control a CreatePolygon().
Transformacions
Cada Node té un Transform propietat que controla la seva posició local, rotació i escala:
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);
Herència de Transformacions
Les transformacions es componen a través de la jerarquia de l’escena. La posició en l’espai mundial d’un fill és el producte de totes les transformacions dels avantpassats:
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
La de només lectura GlobalTransform propietat a cada Node proporciona la matriu de transformació en l’espai mundial calculada després de composar totes les transformacions dels avantpassats. Accediu al resultat mitjançant node.GlobalTransform.Matrix.
Materials
La biblioteca inclou tres tipus de material amb una complexitat creixent:
LambertMaterial
Material clàssic només difús:
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
Amplia Lambert amb reflexos especulars:
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
Material de renderització basat en la física utilitzat per 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;
Els materials PBR admeten ranures de textures per al color base, metàl·lic/aspresa, normal, emissiu i mapes d’occlusió mitjançant propietats de ruta de textura de cadena.
Utilitats Matemàtiques
La biblioteca ofereix un conjunt de primitives matemàtiques per a operacions espacials 3D:
Tipus de Vectors
| Tipus | Components | Precisió | Ús comú |
|---|---|---|---|
Vector2 | X, Y | float | coordenades de textura UV |
Vector3 | X, Y, Z | float | Vector de 3 components d’ús general |
Vector4 | X, Y, Z, W | float | Punts de control, normals |
FVector3 | X, Y, Z | float | Propietats de transformació (Desplaçament, Escala) |
FVector4 | X, Y, Z, W | float | Dades d’element de vèrtex |
Quaternió
Els quaternions representen rotacions sense bloqueig de cardan:
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
Caixes delimitadores alineades amb els eixos per a consultes espacials:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Elements de vèrtex
Les malles poden portar capes de dades addicionals per vèrtex més enllà de les posicions:
- VertexElementNormal – normals de superfície per a càlculs d’il·luminació.
- VertexElementUV – coordenades de textura per a mapar imatges sobre la geometria.
- VertexElementVertexColor – dades de color RGBA per vèrtex.
Cada element de vèrtex té un MappingMode (per punt de control, per vèrtex de polígon o per polígon) i un ReferenceMode (valors directes o valors indexats).
Clips d’animació
El Scene classe admet clips d’animació amb nom a través de CreateAnimationClip() i GetAnimationClip(). En l’edició FOSS actual, la creació i la cerca de clips d’animació són funcionals, però les dades de fotogrames clau i la reproducció encara no s’han implementat.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Què ve a continuació
La propera publicació cobreix treballar amb formats de fitxer 3D a .NET – una guia pràctica, format per format, d’OBJ, STL, glTF, FBX i 3MF amb opcions de càrrega/descarrega i patrons de conversió per lots.