Jak pobrać modele 3D w .NET

Jak pobrać modele 3D w .NET

Aspose.3D dla .NET zapewnia prostą API do otwierania plików 3D bez zależności. po załadowaniu pliku w Scene Obiekt można przejść hierarchii węzłów i przeczytać dane geometryczne dla każdego mesha.

Przewodnik krok po kroku

Krok 1: Instalacja pakietu

Dodaj pakiet NuGet do Twojego projektu:

dotnet add package Aspose.3D.FOSS

Sprawdź :

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

Krok 2: Wprowadzenie klasy scenicznej

i The Scene Klasy są najwyższym pojemnikiem dla wszystkich danych 3D. Importować nazwę:

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

Krok 3: Pobierz plik

Używanie Scene.Open() Aby pobrać dowolny format obsługiwany. biblioteka wykrywa format z rozszerzenia pliku:

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

lub użyj statycznej fabryki:

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

Wsparcie dla OBJ, STL, GLTF 2.0 / GLB, FBX, COLLADA, PLY i 3MF.


Krok 4: Przechodź przez scenę

„Przemocny sceną jest drzewo Node Obiekty z korzeniami w 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żdy z nich Node Może przynieść jeden Entity (Mech, kamera i światło) sprawdź node.Entity przed dostępem.


Krok 5: Dostęp do danych Vertex i Polygon

Wprowadź podmiot węzła do Mesh Czytaj dalej o punktach kontrolnych i poligonie:

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: Wprowadź opcje ładowania specyficzne dla formatu

W przypadku kontrolowania zanieczyszczeń, przejdź do LoadOptions Podklasowe informacje:

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

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

Inne opcje klasy: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


Wspólne problemy i rozwiązania

ImportException Kiedy zadzwonić Scene.Open()

Plik może być zepsuty lub w nieopodatkowanym formacie. sprawdź, czy plik jest otwarty w widoku 3D i czy format znajduje się na popartej liście.

Zaginiony materiał po obciążeniu OBJ

Miejsce The .mtl Archiwum obok .obj Archiwum i gwarancja ObjLoadOptions.EnableMaterials = true.

System koordynacyjny nie jest zgodny (model pojawia się z rotacją)

Zestaw ObjLoadOptions.FlipCoordinateSystem = true lub zastosowanie rotacji do korzeniowego węzła Transform.

NullReferenceException Dostęp node.Entity

Nie każdy węzły przynosi geometrii. zawsze sprawdź if (node.Entity is Mesh mesh) Przed rozpoczęciem działalności w MŚP.


Często zadawane pytania (FAQ)

Jakie formaty 3D można pobrać?

OBJ, STL (binary i ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY i 3MF.

Czy mogę pobrać z prądu?

Tak i tak. Scene.Open() akceptuje A Stream:

using var stream = File.OpenRead("model.glb");
scene.Open(stream);

Jak uzyskać normę powierzchniową?

Po wyładowaniu, zadzwoń mesh.GetElement(VertexElementType.Normal) Aby uzyskać dostęp do VertexElementNormal w warstwie.

Czy biblioteka jest bezpieczna?

Każdy z nich Scene - wskaźnik jest niezależny. ładowanie oddzielnych plików do odrębnych Scene Przykłady z oddzielnych filarów są bezpieczne.

 Polski