Az bevezető bejegyzés, lefedtük, hogy mi az Aspose.3D FOSS a .NET számára, és hogyan lehet elkezdeni. Ez a bejegyzés mélyebben belemegy a könyvtárat alkotó kulcsfontosságú funkciókba, kódpéldákkal minden területhez.
Minden példa a következő using direktívát feltételezi:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
És a NuGet csomagot:
dotnet add package Aspose.3D --version 26.1.0
A jelenet gráf
A jelenetgrafikon a fő adatstruktúra. A Scene tartalmaz egy RootNode, és minden Node lehetnek gyermekcsomópontok és egy csatolt Entity (például egy Mesh vagy Camera).
Node-ok létrehozása és navigálása
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);
Entity-k csatolása node-okhoz
Az entitások a jelenet vizuális tartalma – hálók, kamerák és fények. Csatold őket a 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");
Beépített primitívek
A .NET kiadás tartalmaz paraméteres alakzat osztályokat, amelyek kézi vertex-építés nélkül generálják a geometriát:
| Primitív | Leírás |
|---|---|
Box | Tengelyekhez igazított doboz állítható szélességgel, magassággal és mélységgel |
Sphere | Paraméteres gömb állítható sugárral |
Cylinder | Paraméteres henger állítható felső/alsó sugárral és magassággal |
Ezek a primitívek közvetlenül csatolhatók a csomópontokhoz, vagy átalakíthatók egy. Mesh keresztül ToMesh():
var cylinder = new Cylinder(1, 1, 2);
var mesh = cylinder.ToMesh();
Console.WriteLine("Vertices: " + mesh.ControlPoints.Count);
Console.WriteLine("Polygons: " + mesh.PolygonCount);
Mesh felépítése
Ha teljes irányításra van szükséged, építs mesh-eket a semmiből vezérlőpontok és poligon definíciók használatával:
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");
Vezérlőpontok használata Vector4 a w komponens beállítva 1.0f standard kartéziai pozíciókhoz. A poligonok a vezérlőpont-indexek átadásával definiálhatók CreatePolygon().
Transzformációk
Minden Node van egy Transform tulajdonság, amely szabályozza a helyi pozícióját, forgását és méretét:
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);
Transform öröklődés
A transzformációk a jelenet hierarchiáján keresztül komponálódnak. Egy gyermek világkoordinátás pozíciója az összes ős transzformáció szorzata:
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
Az írásvédett GlobalTransform tulajdonság minden Node szolgáltja a kiszámított világkoordináta-transzformációs mátrixot az összes ős transzformáció összeállítása után. Az eredmény elérhető a node.GlobalTransform.Matrix.
Anyagok
A könyvtár három anyagtípust tartalmaz, növekvő komplexitással:
LambertMaterial
Klasszikus, csak diffúz anyag:
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
Kiterjeszti a Lambert-et spekuláris kiemelésekkel:
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
Fizikai alapú renderelés anyaga, amelyet a glTF 2.0 használ:
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;
A PBR anyagok támogatják a textúrahelyeket az alapszín, a fémesség/érdeség, a normál, az emisszív és az elnyomási térképekhez, string típusú textúraútvonal tulajdonságokon keresztül.
Matematikai segédeszközök
A könyvtár egy sor matematikai primitívet biztosít 3D térbeli műveletekhez:
Vektor típusok
| Típus | Komponensek | Pontosság | Általános használat |
|---|---|---|---|
Vector2 | X, Y | float | UV textúra koordináták |
Vector3 | X, Y, Z | float | Általános célú 3 komponensű vektor |
Vector4 | X, Y, Z, W | float | Vezérlőpontok, normálok |
FVector3 | X, Y, Z | float | Átalakítási tulajdonságok (Eltolás, Méretezés) |
FVector4 | X, Y, Z, W | float | Vertex elem adatok |
Kvaternió
A kvaterniók a forgatásokat gimbal lock nélkül ábrázolják:
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
Tengelyhez igazított határolódobozok térbeli lekérdezésekhez:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Vertex Elements
A hálók további, csúcsonkénti adatrétegeket is tartalmazhatnak a pozíciókon túl:
- VertexElementNormal – felületi normálok a megvilágítási számításokhoz.
- VertexElementUV – textúra koordináták képek geometriára leképezéséhez.
- VertexElementVertexColor – csúcsonkénti RGBA színadatok.
Minden vertex elem rendelkezik egy MappingMode (vezérlőpontonként, poligon csúcsonként vagy poligontként) és egy ReferenceMode (közvetlen értékek vagy indexelt értékek).
Animation Clips
A Scene osztály támogatja a névvel ellátott animációs klipeket a CreateAnimationClip() és GetAnimationClip(). A jelenlegi FOSS kiadásban az animációs klipek létrehozása és keresése működik, de a kulcskocka adatok és a lejátszás még nincsenek megvalósítva.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Mi következik
A következő bejegyzés lefedi a 3D fájlformátumok kezelését a .NET környezetben – egy gyakorlati, formátumonkénti útmutató az OBJ, STL, glTF, FBX és 3MF formátumokhoz, betöltési/mentési lehetőségekkel és kötegelt konverziós mintákkal.