Jak načítat 3D modely v .NET

Jak načítat 3D modely v .NET

Aspose.3D pro .NET poskytuje jednoduché API pro otevření 3D souborů bez nativních závislostí. Po načtení souboru do systému je možné použít aplikaci, která se používá k přehrávání dat v podobě 3d soubory. Scene Objektem můžete projít hierarchií uzlů a přečíst geometrické údaje o každém sítku.

Krok za krokem

Krok 1: Nainstalujte balíček

Přidat balíček NuGet do projektu:

dotnet add package Aspose.3D.FOSS

Ověřit:

using Aspose.ThreeD;
Console.WriteLine("Aspose.3D loaded.");

Krok 2: Importovat třídu scény

Úřad pro bezpečnost a ochranu zdraví Scene class je kontejner nejvyšší úrovně pro všechny 3D data. Import namespace:

using Aspose.ThreeD;
using Aspose.ThreeD.Formats;

Krok 3: Nahrát soubor

Použití: Scene.Open() knihovna detekuje formát z rozšíření souboru:

var scene = new Scene();
scene.Open("model.obj");

Nebo použijte statickou továrnu:

var scene = Scene.FromFile("model.obj");

Obě podporují OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY a 3MF.


Krok 4: Vstupní uzly scény

Nabitá scéna je stromem… Node objekty 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 obsahovat: Entity - Zkontrolujte. node.Entity před vstupem.


Krok 5: Přístup k údajům o vrcholu a polygonů

Odposlouchejte entitu uzlu k Mesh a číst její kontrolní 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: Aplikujte možnosti načítání specifické pro formát

Pro kontrolu jemných zrn, předcházet LoadOptions Podtřída:

var options = new ObjLoadOptions
{
    FlipCoordinateSystem = true,
    Scale = 0.01,
    EnableMaterials = true
};

var scene = new Scene();
scene.Open("model.obj", options);

Ostatní třídy opcí: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Obvyklé problémy a řešení

ImportException při volání Scene.Open()

Soubor může být poškozen nebo v nepodporovaném formátu. Ověřte, zda se soubor otevírá ve 3D zobrazovateli a že je tento formát na seznamu podporovaných.

Chybějící materiály po naložení OBJ

Umístěte: .mtl soubor vedle .obj soubor a zajistit ObjLoadOptions.EnableMaterials = true.

Nesoulad souřadnicového systému (model se zobrazuje otočeným)

Sestavení: ObjLoadOptions.FlipCoordinateSystem = true nebo použít rotaci k kořenovému uzlu. Transform.

NullReferenceException přístup node.Entity

Ne každý uzel nese geometrii. Vždy zkontrolujte if (node.Entity is Mesh mesh) před přístupem k vlastnostem sítí.


Časté otázky (FAQ)

Které 3D formáty můžu načíst?

OBJ, STL (binární a ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY a 3MF.

Můžu si to naložit z potoka?

  • Ano, jsem. Scene.Open() přijímá a Stream:
using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Jak se dostanou na povrch?

Po načtení, zavolejte. mesh.GetElement(VertexElementType.Normal) k přístupu do VertexElementNormal - Zátěž.

Je knihovna bezpečná?

Každá. Scene instanci je nezávislá. Loading separate files into separate Scene Příklady z oddělených článků jsou bezpečné.

 Čeština