Kuinka ladata 3D-malleja .NET-ympäristössä
Aspose.3D for .NET tarjoaa suoraviivaisen API:n 3D‑tiedostojen avaamiseen ilman natiiviriippuvuuksia. Kun tiedosto on ladattu Scene‑objektiin, voit käydä läpi node hierarchy -rakenteen ja lukea geometry data jokaisesta meshistä.
Vaiheittainen opas
Vaihe 1: Asenna paketti
Lisää NuGet‑paketti projektiisi:
dotnet add package Aspose.3D --version 26.1.0Vahvista:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Vaihe 2: Tuo Scene-luokka
Scene-luokka on ylimmän tason säiliö kaikille 3D‑tiedoille. Tuo nimiavaruus:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Vaihe 3: Lataa tiedosto
Käytä Scene.Open() ladataksesi minkä tahansa tuetun formaatin. Kirjasto tunnistaa formaatin tiedostopäätteestä:
var scene = new Scene();
scene.Open("model.obj");Tai käytä staattista tehdasta:
var scene = Scene.FromFile("model.obj");Molemmat tukevat OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY ja 3MF.
Vaihe 4: Kulje läpi kohtauksen solmut
Ladattu kohtaus on Node-objektien puu, jonka juuri on 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);Jokainen Node voi sisältää Entity (verkko, kamera, valo). Tarkista node.Entity ennen käyttöä.
Vaihe 5: Pääsy Vertex‑ ja Polygon‑tietoihin
Muunna solmun entiteetti Mesh:ksi ja lue sen ohjauspisteet ja polygonit:
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})");
}
}
}Vaihe 6: Käytä formaattiin liittyviä latausasetuksia
Hienojakoista hallintaa varten, välitä LoadOptions alaluokka:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Muut vaihtoehtoluokat: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Yleisiä ongelmia ja korjauksia
ImportException kun kutsutaan Scene.Open()
Tiedosto voi olla vioittunut tai siinä voi olla tukematon formaattivariantti. Varmista, että tiedosto avautuu 3D viewer -ohjelmassa ja että formaatti on tuettujen luettelossa.
Puuttuvat materiaalit OBJ‑latauksen jälkeen
Aseta .mtl‑tiedosto .obj‑tiedoston viereen ja varmista ObjLoadOptions.EnableMaterials = true.
Koordinaatistojärjestelmän epäsopivuus (malli näyttää kierretyltä)
Aseta ObjLoadOptions.FlipCoordinateSystem = true tai sovella kiertoa juurisolmun Transform.
NullReferenceException pääsy node.Entity
Kaikki solmut eivät sisällä geometriaa. Tarkista aina if (node.Entity is Mesh mesh) ennen mesh‑ominaisuuksien käyttämistä.
Usein kysytyt kysymykset (UKK)
Mitä 3D‑muotoja voin ladata?
OBJ, STL (binary ja ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY ja 3MF.
Voinko ladata virrasta?
Kyllä. Scene.Open() hyväksyy Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Miten saan pinnan normaalit?
Lataamisen jälkeen kutsu mesh.GetElement(VertexElementType.Normal) päästäksesi VertexElementNormal-kerrokseen.
Onko kirjasto säikeiturvallinen?
Jokainen Scene-instanssi on itsenäinen. Eri tiedostojen lataaminen eri Scene-instansseihin eri säikeistä on turvallista.