In the esittelypostaus, me käsittelimme mitä Aspose.3D FOSS for .NET on ja miten aloittaa. Tämä postaus menee syvemmälle kirjaston keskeisiin ominaisuuksiin, sisältäen koodiesimerkkejä jokaisesta osa-alueesta.

Kaikki esimerkit olettavat seuraavan using-lauseen:

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

Ja NuGet-paketti:

dotnet add package Aspose.3D.Converter --version 1.0.0

Scene Graph

Kohtausgrafi on ydintietorakenne. A Scene sisältää RootNode,voi sisältää alisolmuja ja liitetyn Node (kuten a Entity tai Mesh Entiteetit ovat kohtauksen visuaalinen sisältö – verkot, kamerat ja valot. Kiinnitä ne käyttäen Camera).

Solmujen luominen ja navigointi

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

Entiteettien liittäminen solmuihin

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

Sisäänrakennetut primitiivit

.NET -versio sisältää parametrisia muoto-luokkia, jotka tuottavat geometriaa ilman manuaalista vertex-rakennetta:

KuvausAkselin suuntainen laatikko, jonka leveys, korkeus ja syvyys ovat säädettävissä
BoxParametrinen pallo, jonka säde on säädettävissä
SphereParametrinen sylinteri, jonka ylä- ja alapuoliset säteet sekä korkeus ovat säädettävissä
CylinderNämä alkeiset voidaan liittää suoraan solmuihin tai muuntaa

a Mesh kautta ToMesh():

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

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

Mesh-rakentaminen

Jos tarvitset täyden hallinnan, rakenna mesh-objekteja alusta alkaen käyttämällä ohjauspisteitä ja polygonimäärittelyjä:

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

Ohjauspisteet käyttävät Vector4 kanssa w komponentti asetettu arvoon 1.0f standardi‑karteesisille sijainneille. Polygoneja määritellään antamalla ohjauspisteiden indeksejä CreatePolygon().

Muunnokset

Jokainen Node on Transform ominaisuus, joka ohjaa sen paikallista sijaintia, kiertoa ja skaalausta:

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

Transformin periytyminen

Transformit koostuvat kohtauksen hierarkian kautta. Lapsen maailmanavaruuden sijainti on kaikkien esivanhempien transformien tulo:

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

Vain luku GlobalTransform ominaisuus jokaisessa Node tarjoaa lasketun maailmanavaruuden muunnosmatriisin kaikkien esivanhempien muunnosten koostamisen jälkeen. Pääset tulokseen kautta node.GlobalTransform.Matrix.

Materiaalit

Kirjasto sisältää kolme materiaalityyppiä, joiden monimutkaisuus kasvaa:

LambertMaterial

Klassinen pelkästään hajautusmateriaali:

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

Laajentaa Lambertia spekulaarisilla korostuksilla:

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

Fysiikkaan perustuva renderöintimateriaali, jota käyttää 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-materiaalit tukevat tekstuuripaikkoja perusvärille, metallisuudelle/karkeudelle, normaalille, emissiiviselle ja varjostuskuville merkkijonopolkuominaisuuksien kautta.

Matematiikkatyökalut

Kirjasto tarjoaa joukon matemaattisia perusobjekteja 3D-tilatoiminnoille:

Vektorityypit

TyyppiKomponentitTarkkuusYleinen käyttö
Vector2X, YfloatUV-tekstuurikoordinaatit
Vector3X, Y, ZfloatYleiskäyttöinen 3-komponenttinen vektori
Vector4X, Y, Z, WfloatOhjauspisteet, normaalit
FVector3X, Y, ZfloatTransformaatio-ominaisuudet (Siirto, Skaalaus)
FVector4X, Y, Z, WfloatVertex-elementin data

Quaternion

Kvaternionit esittävät kiertoja ilman gimbal-lukkoa:

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

Akselikohtaiset rajauslaatikot tilakyselyihin:

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

Vertex-elementit

Verkot voivat sisältää lisäisiä per-vertex -tietokerroksia sijaintien lisäksi:

  • VertexElementNormal – pintanormaalit valaistuslaskelmia varten.
  • VertexElementUV – tekstuurikoordinaatit kuvien kartoitukseen geometriassa.
  • VertexElementVertexColor – per-vertex RGBA -väridata.

Jokaisella vertex-elementillä on MappingMode (per ohjauspiste, per polygon vertex, tai per polygon) ja ReferenceMode (suorat arvot tai indeksoidut arvot).

Animaatioleikkeet

Se Scene luokka tukee nimettyjä animaatioklippejä kautta CreateAnimationClip() ja GetAnimationClip(). Nykyisessä FOSS-versiossa animaatioklipin luominen ja haku toimivat, mutta avainruutujen dataa ja toistoa ei ole vielä toteutettu.

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

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

Mitä seuraavaksi

Seuraava postaus kattaa työskentely 3D-tiedostomuotojen kanssa .NET – käytännön, formaatti-kohtainen opas OBJ:lle, STL:lle, glTF:lle, FBX:lle ja 3MF:lle, jossa on lataus-/tallennusvaihtoehdot ja erämuunnosmalleja.