Ako načítať 3D modely v .NET

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.0

Overiť:

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é.

 Slovenčina