Jak načíst 3D modely v .NET
Aspose.3D for .NET poskytuje jednoduché API pro otevírání 3D souborů bez nativních závislostí. Po načtení souboru do objektu Scene můžete procházet hierarchii uzlů a číst geometrická data pro každý mesh.
Průvodce krok za krokem
Krok 1: Nainstalujte balíček
Přidejte balíček NuGet do svého projektu:
dotnet add package Aspose.3D --version 26.1.0Ověřit:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Krok 2: Importovat třídu Scene
Třída Scene je kontejner nejvyšší úrovně pro všechna 3D data. Naimportujte jmenný prostor:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Krok 3: Načíst soubor
Použijte Scene.Open() k načtení libovolného podporovaného formátu. Knihovna detekuje formát podle přípony souboru:
var scene = new Scene();
scene.Open("model.obj");Nebo použijte statickou továrnu:
var scene = Scene.FromFile("model.obj");Oba podporují OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY a 3MF.
Krok 4: Procházet uzly scény
Načtená scéna je strom objektů Node zakořeněný v 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);Každý Node může nést Entity (síť, kamera, světlo). Zkontrolujte node.Entity před přístupem.
Krok 5: Přístup k datům vrcholů a polygonů
Přetypujte entitu uzlu na Mesh a přečtěte její řídicí body a polygony:
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})");
}
}
}Krok 6: Použít specifické možnosti načítání formátu
Pro jemnozrnou kontrolu předávejte podtřídu LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Další třídy možností: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Běžné problémy a opravy
ImportException při volání Scene.Open()
Soubor může být poškozený nebo ve formátu, který není podporován. Ověřte, že se soubor otevře ve 3D prohlížeči a že formát je v seznamu podporovaných.
Chybějící materiály po načtení OBJ
Umístěte soubor .mtl vedle souboru .obj a zajistěte ObjLoadOptions.EnableMaterials = true.
Neshoda souřadnicových systémů (model se jeví jako otočený)
Nastavte ObjLoadOptions.FlipCoordinateSystem = true nebo aplikujte rotaci na Transform kořenového uzlu.
NullReferenceException přistupuje k node.Entity
Ne každý uzel nese geometrii. Vždy zkontrolujte if (node.Entity is Mesh mesh) před přístupem k vlastnostem meshe.
Často kladené otázky (FAQ)
Jaké 3D formáty mohu načíst?
OBJ, STL (binární a ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY a 3MF.
Mohu načíst ze streamu?
Ano. Scene.Open() přijímá Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Jak získám povrchové normály?
Po načtení zavolejte mesh.GetElement(VertexElementType.Normal) pro přístup k vrstvě VertexElementNormal.
Je knihovna bezpečná pro vlákna?
Každá instance Scene je nezávislá. Načítání samostatných souborů do samostatných instancí Scene z oddělených vláken je bezpečné.