Hvordan laste 3D-modeller i .NET
Aspose.3D for .NET gir et enkelt API for å åpne 3D-filer uten native avhengigheter. Etter å ha lastet en fil inn i et Scene-objekt kan du gå gjennom nodehierarkiet og lese geometridata for hver mesh.
Steg-for-steg guide
Steg 1: Installer pakken
Legg til NuGet‑pakken i prosjektet ditt:
dotnet add package Aspose.3D --version 26.1.0Bekreft:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Steg 2: Importer Scene‑klassen
Scene-klassen er den øverste beholderen for all 3D‑data. Importer navnerommet:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Trinn 3: Last inn en fil
Bruk Scene.Open() for å laste inn et hvilket som helst støttet format. Biblioteket oppdager formatet fra filendelsen:
var scene = new Scene();
scene.Open("model.obj");Eller bruk den statiske fabrikken:
var scene = Scene.FromFile("model.obj");Begge støtter OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY og 3MF.
Steg 4: Gå gjennom scenenoder
En lastet scene er et tre av Node‑objekter med roten i 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);Hver Node kan ha en Entity (mesh, kamera, lys). Sjekk node.Entity før du får tilgang.
Steg 5: Få tilgang til Vertex- og Polygon-data
Kast en nodes enhet til Mesh og les kontrollpunktene og polygonene:
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})");
}
}
}Steg 6: Bruk formatspesifikke lastingsalternativer
For finjustert kontroll, send inn en LoadOptions underklasse:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Andre alternativklasser: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Vanlige problemer og løsninger
ImportException når du kaller Scene.Open()
Filen kan være korrupt eller i en ikke‑støttet formatvariant. Kontroller at filen åpnes i en 3D‑viser og at formatet er i den støttede listen.
Manglende materialer etter OBJ-lastning
Plasser .mtl-filen ved siden av .obj-filen og sørg for ObjLoadOptions.EnableMaterials = true.
Koordinatsystem mismatch (modellen ser rotert ut)
Angi ObjLoadOptions.FlipCoordinateSystem = true eller bruk en rotasjon på rotnodeens Transform.
NullReferenceException får tilgang til node.Entity
Ikke hver node inneholder geometri. Sjekk alltid if (node.Entity is Mesh mesh) før du får tilgang til mesh‑egenskaper.
Ofte stilte spørsmål (FAQ)
Hvilke 3D‑formater kan jeg laste inn?
OBJ, STL (binær og ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY og 3MF.
Kan jeg laste fra en strøm?
Ja. Scene.Open() aksepterer en Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Hvordan får jeg overflatenormaler?
Etter lasting, kall mesh.GetElement(VertexElementType.Normal) for å få tilgang til VertexElementNormal‑laget.
Er biblioteket trådsikkert?
Hver Scene‑instans er uavhengig. Å laste separate filer inn i separate Scene‑instanser fra separate tråder er trygt.