כיצד לטעון מודלים תלת‑ממדיים ב‑.NET

כיצד לטעון מודלים תלת‑ממדיים ב‑.NET

Aspose.3D for .NET מספק API פשוט לפתיחת קבצי 3D ללא תלותיות מקומיות. לאחר טעינת קובץ לאובייקט Scene ניתן לעבור על היררכיית הצמתים ולקרוא נתוני גאומטריה עבור כל רשת.

מדריך שלב אחר שלב

שלב 1: התקן את החבילה

הוסף את חבילת NuGet לפרויקט שלך:

dotnet add package Aspose.3D --version 26.1.0

אמת:

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

שלב 2: ייבא את Scene Class

המחלקה Scene היא המכולה ברמת העל עבור כל נתוני ה‑3D. ייבא את מרחב השמות:

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

שלב 3: טען קובץ

השתמש בScene.Open() כדי לטעון כל פורמט נתמך. הספרייה מזהה את הפורמט מהרחבת הקובץ:

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

או השתמש במפעל הסטטי:

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

שניהם תומכים ב‑OBJ, STL, glTF 2.0 / GLB, FBX, COLLADA, PLY ו‑3MF.


שלב 4: מעבר על צמתי הסצנה

סצנה טעונה היא עץ של עצמים Node שמקורו ב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);

כל Node עשוי לשאת Entity (רשת, מצלמה, אור). בדוק node.Entity לפני הגישה.


שלב 5: גישה לנתוני קודקוד ופוליגון

המר את הישות של הצומת ל‑Mesh וקרא את נקודות הבקרה והפוליגונים שלה:

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})");
        }
    }
}

שלב 6: החל אפשרויות טעינה ספציפיות לפורמט

לשליטה מדויקת, העבר תת‑מחלקה של LoadOptions:

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

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

מחלקות אפשרויות אחרות: FbxLoadOptions, GltfLoadOptions, StlLoadOptions, ColladaLoadOptions, PlyLoadOptions.


בעיות נפוצות ותיקונים

ImportException בעת קריאה Scene.Open()

הקובץ עשוי להיות פגום או בפורמט שאינו נתמך. ודא שהקובץ נפתח בתצוגת 3D ושפורמט נמצא ברשימת הנתמכים.

חומרים חסרים לאחר טעינת OBJ

מקם את הקובץ .mtl לצד הקובץ .obj וודא ObjLoadOptions.EnableMaterials = true.

אי התאמה של מערכת הקואורדינטות (המודל נראה מסובב)

הגדר ObjLoadOptions.FlipCoordinateSystem = true או החל סיבוב לTransform של צומת השורש.

NullReferenceException ניגש לnode.Entity

לא כל צומת נושא גאומטריה. תמיד בדוק if (node.Entity is Mesh mesh) לפני גישה למאפייני הרשת.


שאלות נפוצות (FAQ)

אילו פורמטים תלת‑ממדיים אני יכול לטעון?

OBJ, STL (בינארי ו-ASCII), glTF 2.0 / GLB, FBX, COLLADA (DAE), PLY, ו-3MF.

האם אני יכול לטעון מזרם?

כן. Scene.Open() מקבל Stream:

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

איך אני מקבל נורמליות של משטח?

לאחר הטעינה, קרא mesh.GetElement(VertexElementType.Normal) כדי לגשת לשכבה VertexElementNormal.

האם הספרייה בטוחה לשימוש מרובה תהליכים?

כל מופע Scene הוא עצמאי. טעינת קבצים נפרדים למופעים נפרדים של Scene מתוך חוטים נפרדים היא בטוחה.

 עברית