Cum să încărcați modele 3D în .NET
Aspose.3D for .NET oferă un API simplu pentru deschiderea fișierelor 3D fără dependențe native. După încărcarea unui fișier într-un obiect Scene poți parcurge ierarhia nodurilor și citi datele geometrice pentru fiecare mesh.
Ghid pas cu pas
Pasul 1: Instalați pachetul
Adăugați pachetul NuGet în proiectul dvs.:
dotnet add package Aspose.3D --version 26.1.0Verificați:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Pasul 2: Importă clasa Scene
Clasa Scene este containerul de nivel superior pentru toate datele 3D. Importaţi spaţiul de nume:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Pasul 3: Încarcă un fișier
Utilizați Scene.Open() pentru a încărca orice format acceptat. Biblioteca detectează formatul din extensia fișierului:
var scene = new Scene();
scene.Open("model.obj");Sau folosiți fabrica statică:
var scene = Scene.FromFile("model.obj");Ambele suportă OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY și 3MF.
Pasul 4: Parcurge nodurile scenei
O scenă încărcată este un arbore de obiecte Node cu rădăcina la 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);Fiecare Node poate transporta un Entity (mesh, cameră, lumină). Verificați node.Entity înainte de a accesa.
Pasul 5: Accesarea datelor de vârf și poligon
Transformă entitatea unui nod în Mesh și citește punctele de control și poligoanele:
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})");
}
}
}Pasul 6: Aplică opțiunile de încărcare specifice formatului
Pentru un control fin, transmiteţi o subclasă LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Alte clase de opțiuni: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Probleme comune și soluții
ImportException când se apelează Scene.Open()
Fișierul poate fi corupt sau într-o variantă de format nesuportată. Verificați că fișierul se deschide într-un vizualizator 3D și că formatul se află în lista de formate suportate.
Materiale lipsă după încărcarea OBJ
Plasaţi fişierul .mtl alături de fişierul .obj şi asiguraţi ObjLoadOptions.EnableMaterials = true.
Neconcordanță a sistemului de coordonate (modelul pare rotit)
Setați ObjLoadOptions.FlipCoordinateSystem = true sau aplicați o rotație la Transform al nodului rădăcină.
NullReferenceException accesând node.Entity
Nu fiecare nod conține geometrie. Verificați întotdeauna if (node.Entity is Mesh mesh) înainte de a accesa proprietățile mesh-ului.
Întrebări frecvente (FAQ)
Ce formate 3D pot încărca?
OBJ, STL (binare și ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY și 3MF.
Pot încărca dintr-un flux?
Da. Scene.Open() acceptă un Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Cum obțin normalele suprafeței?
După încărcare, apelaţi mesh.GetElement(VertexElementType.Normal) pentru a accesa stratul VertexElementNormal.
Este biblioteca thread-safe?
Fiecare instanță Scene este independentă. Încărcarea fișierelor separate în instanțe separate Scene din fire de execuție separate este sigură.