Hoe 3D-modellen te laden in .NET
Aspose.3D for .NET biedt een eenvoudige API voor het openen van 3D‑bestanden zonder native afhankelijkheden. Na het laden van een bestand in een Scene‑object kun je door de knooppunt‑hiërarchie lopen en geometrie‑gegevens lezen voor elke mesh.
Stapsgewijze handleiding
Stap 1: Installeer het pakket
Voeg het NuGet‑pakket toe aan uw project:
dotnet add package Aspose.3D --version 26.1.0Verifiëren:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Stap 2: Importeer de Scene-klasse
De Scene-klasse is de bovenste container voor alle 3D-gegevens. Importeer de namespace:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Stap 3: Een bestand laden
Gebruik Scene.Open() om elk ondersteund formaat te laden. De bibliotheek detecteert het formaat aan de hand van de bestandsextensie:
var scene = new Scene();
scene.Open("model.obj");Of gebruik de statische fabriek:
var scene = Scene.FromFile("model.obj");Beiden ondersteunen OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY en 3MF.
Stap 4: Doorloop sceneknooppunten
Een geladen scène is een boom van Node objecten met wortel scene.RootNode:
void Walk(Node node, int depth = 0)
{
var indent = new string(' ', depth * 2);
Console.WriteLine($"{indent}Node: {node.Name}");
foreach (var child in node.ChildNodes)
Walk(child, depth + 1);
}
Walk(scene.RootNode);Elke Node kan een Entity (mesh, camera, licht) dragen. Controleer node.Entity voordat u toegang krijgt.
Stap 5: Toegang tot Vertex‑ en Polygon‑gegevens
Cast een node’s entiteit naar Mesh en lees de controlepunten en polygonen:
using Aspose.ThreeD.Entities;
foreach (var node in scene.RootNode.ChildNodes)
{
if (node.Entity is Mesh mesh)
{
Console.WriteLine($"Mesh '{node.Name}': " +
$"{mesh.ControlPoints.Count} vertices, " +
$"{mesh.PolygonCount} polygons");
if (mesh.ControlPoints.Count > 0)
{
var v = mesh.ControlPoints[0];
Console.WriteLine($" First vertex: ({v.X:F4}, {v.Y:F4}, {v.Z:F4})");
}
}
}Stap 6: Toepassen van formaat‑specifieke laadopties
Voor fijnmazige controle, geef een LoadOptions subklasse door:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Andere optieklassen: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Veelvoorkomende problemen en oplossingen
ImportException bij het aanroepen van Scene.Open()
Het bestand kan beschadigd zijn of in een niet‑ondersteunde formaatvariant. Controleer of het bestand opent in een 3D‑viewer en dat het formaat in de ondersteunde lijst staat.
Ontbrekende materialen na OBJ laden
Plaats het .mtl bestand naast het .obj bestand en zorg ervoor ObjLoadOptions.EnableMaterials = true.
Coördinatensysteem mismatch (model lijkt gedraaid)
Stel ObjLoadOptions.FlipCoordinateSystem = true in of pas een rotatie toe op de Transform van de hoofdnode.
NullReferenceException toegang krijgen tot node.Entity
Niet elke node bevat geometrie. Controleer altijd if (node.Entity is Mesh mesh) voordat u mesh‑eigenschappen benadert.
Veelgestelde vragen (FAQ)
Welke 3D-formaten kan ik laden?
OBJ, STL (binair en ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY en 3MF.
Kan ik laden vanuit een stream?
Ja. Scene.Open() accepteert een Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Hoe krijg ik oppervlaknormaalvectoren?
Na het laden, roep mesh.GetElement(VertexElementType.Normal) aan om de VertexElementNormal laag te benaderen.
Is de bibliotheek thread-safe?
Elke Scene instantie is onafhankelijk. Het laden van afzonderlijke bestanden in afzonderlijke Scene instanties vanuit afzonderlijke threads is veilig.