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:

BeschrijvingAsgeoriënteerde doos met configureerbare breedte, hoogte, en diepte
BoxParametrische bol met configureerbare straal
SphereParametrische cilinder met configureerbare boven-/onderstraal en hoogte
CylinderDeze 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

TypeComponentenPrecisieAlgemeen gebruik
Vector2X, YfloatUV‑textuurcoördinaten
Vector3X, Y, ZfloatAlgemene 3‑component vector
Vector4X, Y, Z, WfloatControlepunten, normaalvectoren
FVector3X, Y, ZfloatTransformatie-eigenschappen (Translatie, Schaling)
FVector4X, Y, Z, WfloatVertex-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.