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:
| Kuvaus | Akselin suuntainen laatikko, jonka leveys, korkeus ja syvyys ovat säädettävissä |
|---|---|
Box | Parametrinen pallo, jonka säde on säädettävissä |
Sphere | Parametrinen sylinteri, jonka ylä- ja alapuoliset säteet sekä korkeus ovat säädettävissä |
Cylinder | Nä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
| Tyyppi | Komponentit | Tarkkuus | Yleinen käyttö |
|---|---|---|---|
Vector2 | X, Y | float | UV-tekstuurikoordinaatit |
Vector3 | X, Y, Z | float | Yleiskäyttöinen 3-komponenttinen vektori |
Vector4 | X, Y, Z, W | float | Ohjauspisteet, normaalit |
FVector3 | X, Y, Z | float | Transformaatio-ominaisuudet (Siirto, Skaalaus) |
FVector4 | X, Y, Z, W | float | Vertex-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.