Ako načítať 3D modely v .NET
Aspose.3D pre .NET poskytuje jednoduché API na otváranie 3D súborov bez natívnych závislostí. Po načítaní súboru do objektu Scene môžete prechádzať hierarchiu uzlov a čítať geometrické údaje pre každý mesh.
Príručka krok za krokom
Krok 1: Nainštalovať balík
Pridajte balík NuGet do svojho projektu:
dotnet add package Aspose.3D --version 26.1.0Overiť:
using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");Krok 2: Importovať triedu Scene
Trieda Scene je kontajner najvyššej úrovne pre všetky 3D dáta. Importujte namespace:
using Aspose.ThreeD;
using Aspose.ThreeD.Formats;Krok 3: Načítať súbor
Použite Scene.Open() na načítanie akéhokoľvek podporovaného formátu. Knižnica deteguje formát z prípony súboru:
var scene = new Scene();
scene.Open("model.obj");Alebo použite statickú továreň:
var scene = Scene.FromFile("model.obj");Oba podporujú OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY a 3MF.
Krok 4: Prechádzať uzly scény
Načítaná scéna je strom objektov Node zakorenený 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 niesť Entity (mesh, camera, light). Skontrolujte node.Entity pred prístupom.
Krok 5: Prístup k dátam vrcholov a polygonov
Preveďte entitu uzla na Mesh a prečítajte jej kontrolné body a polygóny:
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žiť špecifické možnosti načítania pre formát
Pre detailnú kontrolu použite podtriedu LoadOptions:
var options = new ObjLoadOptions
{
FlipCoordinateSystem = true,
Scale = 0.01,
EnableMaterials = true
};
var scene = new Scene();
scene.Open("model.obj", options);Ďalšie triedy možností: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.
Bežné problémy a riešenia
ImportException pri volaní Scene.Open()
Súbor môže byť poškodený alebo v nepodporovanej variante formátu. Overte, či sa súbor otvára v 3D prehliadači a či je formát v zozname podporovaných.
Chýbajúce materiály po načítaní OBJ
Umiestnite súbor .mtl vedľa súboru .obj a zabezpečte ObjLoadOptions.EnableMaterials = true.
Nesúlad súradnicového systému (model sa javí ako otočený)
Nastavte ObjLoadOptions.FlipCoordinateSystem = true alebo aplikujte rotáciu na Transform koreňového uzla.
NullReferenceException prístup k node.Entity
Nie každý uzol nesie geometriu. Vždy skontrolujte if (node.Entity is Mesh mesh) pred prístupom k vlastnostiam mesh.
Často kladené otázky (FAQ)
Aké 3D formáty môžem načítať?
OBJ, STL (binárny a ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY a 3MF.
Môžem načítať zo streamu?
Áno. Scene.Open() prijíma Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);Ako získať normály povrchu?
Po načítaní zavolajte mesh.GetElement(VertexElementType.Normal), aby ste získali prístup k vrstve VertexElementNormal.
Je knižnica bezpečná pre vlákna?
Každá Scene inštancia je nezávislá. Načítanie samostatných súborov do samostatných Scene inštancií z rôznych vlákien je bezpečné.