In de introductiebericht, we bespraken wat Aspose.3D FOSS voor .NET is en hoe je kunt beginnen. Deze post gaat dieper in op de belangrijkste functies die de bibliotheek vormen, met codevoorbeelden voor elk gebied.
Alle voorbeelden gaan uit van de volgende using-richtlijn:
using Aspose.ThreeD;
using Aspose.ThreeD.Entities;
using Aspose.ThreeD.Shading;
En het NuGet-pakket:
dotnet add package Aspose.3D.Converter --version 1.0.0
De Scene Graph
De scenegraph is de kern datastructuur. Een Scene bevat een RootNode,kan kindknopen hebben en een gekoppelde Node (zoals een Entity of Mesh Entiteiten zijn de visuele inhoud van de scene – meshes, camera’s en lichten. Bevestig ze met behulp van Camera).
Nodes maken en navigeren
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);
Entities aan nodes koppelen
Primitief 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");
Ingebouwde primitives
De .NET editie bevat parametrische vormklassen die geometrie genereren zonder handmatige vertexconstructie:
| Beschrijving | Asgeoriënteerde doos met configureerbare breedte, hoogte, en diepte |
|---|---|
Box | Parametrische bol met configureerbare straal |
Sphere | Parametrische cilinder met configureerbare boven-/onderstraal en hoogte |
Cylinder | Deze primitieve kunnen direct aan knopen worden gekoppeld of geconverteerd naar een |
These primitives can be attached directly to nodes or converted to a 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);
Meshconstructie
Als je volledige controle nodig hebt, bouw dan meshes vanaf nul met behulp van controlepunten en polygoondefinities:
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");
Controlepunten gebruiken Vector4 met de w component ingesteld op 1.0f voor standaard Cartesiaanse posities. Polygonen worden gedefinieerd door controlepuntindices door te geven aan CreatePolygon().
Transformaties
Elke Node heeft een Transform eigenschap die de lokale positie, rotatie en schaal regelt:
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-erfenis
Transforms worden samengesteld via de scènehiërarchie. De wereldruimtepunt van een kind is het product van alle voorouder‑transforms:
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
De alleen‑lezen GlobalTransform eigenschap op elke Node biedt de berekende transformatie‑matrix in wereldruimte na het samenvoegen van alle vooroudertransformaties. Toegang tot het resultaat via node.GlobalTransform.Matrix.
Materialen
De bibliotheek bevat drie materiaaltypen met toenemende complexiteit:
LambertMaterial
Klassiek alleen‑diffuus materiaal:
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
Breidt Lambert uit met speculaire highlights:
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
Fysiek gebaseerd renderingsmateriaal gebruikt door 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-materialen ondersteunen textuur‑slots voor basiskleur, metallic/roughness, normaal, emissief en occlusie‑kaarten via string‑textuurpad‑eigenschappen.
Wiskunde‑hulpmiddelen
De bibliotheek biedt een reeks wiskundige primitieve functies voor 3D‑ruimtelijke bewerkingen:
Vectortypen
| Type | Componenten | Precisie | Algemeen gebruik |
|---|---|---|---|
Vector2 | X, Y | float | UV‑textuurcoördinaten |
Vector3 | X, Y, Z | float | Algemene 3‑component vector |
Vector4 | X, Y, Z, W | float | Controlepunten, normaalvectoren |
FVector3 | X, Y, Z | float | Transformatie-eigenschappen (Translatie, Schaling) |
FVector4 | X, Y, Z, W | float | Vertex-elementgegevens |
Quaternion
Quaternions vertegenwoordigen rotaties zonder gimbal lock:
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
Asgealigneerde begrenzingskaders voor ruimtelijke zoekopdrachten:
// BoundingBox stores Minimum and Maximum FVector3 corners
// Used for frustum culling and spatial partitioning
Vertex-elementen
Meshes kunnen extra per-vertex gegevenslagen naast posities bevatten:
- VertexElementNormal – oppervlaknormals voor verlichtingsberekeningen.
- VertexElementUV – textuurcoördinaten voor het projecteren van afbeeldingen op geometrie.
- VertexElementVertexColor – per-vertex RGBA-kleurgegevens.
Elk vertex-element heeft een MappingMode (per controlepunt, per polygoonvertex, of per polygoon) en een ReferenceMode (directe waarden of geïndexeerde waarden).
Animatieclips
De Scene klasse ondersteunt benoemde animatieclips via CreateAnimationClip() en GetAnimationClip(). In de huidige FOSS-editie zijn het aanmaken en opzoeken van animatieclips functioneel, maar keyframe-gegevens en weergave zijn nog niet geïmplementeerd.
var scene = new Scene();
var clip = scene.CreateAnimationClip("Walk");
// Retrieve by name
var found = scene.GetAnimationClip("Walk");
Console.WriteLine("Clip found: " + (found != null));
Wat volgt
De volgende post behandelt het werken met 3D-bestandsformaten in .NET – een praktische, format-per-format gids voor OBJ, STL, glTF, FBX en 3MF met laad-/opslaoptaken en batchconversiepatronen.