Πώς να φορτώσετε 3D μοντέλα στο .NET
Το Aspose.3D για .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
Η κλάση Scene είναι το κοντέινερ υψηλότερου επιπέδου για όλα τα 3D δεδομένα. Εισάγετε το namespace:
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 (mesh, camera, light). Ελέγξτε 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)
Ποια 3D μορφές μπορώ να φορτώσω;
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 αντίγραφα από ξεχωριστά νήματα είναι ασφαλής.